$(function () {
    'use strict';

    BWA.Popup = BWA.Popup || {};
    BWA.Popup.VirtualFacility = {

        create: function (viewModel, selectedTreeItem) {

            var facilityTypeDataSource = BemsWebApplication.db.createDataSource('BemsFacilityType'),
                CmfacilityTypeDataSource = BemsWebApplication.db.createDataSource('CmFacility'),
                facilityTypes = ko.observableArray(),
                FacilityTypeInfo = ko.observableArray(),
                isNew = ko.observable(false),
                popupVisible = ko.observable(),
                isEditMode = ko.observable(false),
                isViewMode = ko.observable(true),

                cancelButtonVisible = ko.observable(true),

                facilityDataModel = new BWA.CmFacilityViewModel(),
                popupOptions = {

                    position: { offset: '-450 0' },
                    width: '520px',
                    height: 'auto',
                    //shading: false,
                    shadingColor: 'rgba(0,0,0,0.0)',
                    visible: popupVisible,
                    closeOnOutsideClick: false,
                    animation: utils.popup.createAnimation(),
                    shownAction: function () {

                    },
                },
                toolbarItems = [
                    { location: 'before', text: $G('detailInfo') },
                    { location: 'after', widget: 'button', options: { text: $G('edit'), icon: 'edit', visible: isViewMode, disabled: viewModel.hasnotModificationPermission, clickAction: handlePopupButtonEdit } },
                    { location: 'after', widget: 'button', options: { text: $G('delete'), type: 'danger', icon: 'remove', visible: isViewMode, disabled: viewModel.hasnotModificationPermission, clickAction: handlePopupButtonDelete } },
                    { location: 'after', widget: 'button', options: { text: $G('cancel'), icon: 'cancel', visible: cancelButtonVisible, clickAction: handlePopupButtonCancel } },
                    { location: 'after', widget: 'button', options: { text: $G('save'), icon: 'save', visible: isEditMode, disabled: viewModel.hasnotModificationPermission, clickAction: handlePopupButtonSave } },
                    { location: 'after', widget: 'button', options: { text: $G('close'), icon: 'close', clickAction: handlePopupButtonClose } }
                ]

            ;

            facilityDataModel.FacilityTypeName = ko.observable();

            isEditMode.subscribe(function (isEdit) {

                isViewMode(!isEdit);
            });
            var facilityTempName = ko.observable();
            var EditNameDev;
            function handlePopupButtonEdit() {

                isEditMode(true);
                cancelButtonVisible(true);
                facilityTempName(facilityDataModel.toJS().Name);
            }

            function handlePopupButtonCancel() {
                facilityDataModel.Name(facilityTempName());
                isEditMode(false);
                cancelButtonVisible(false);
            }
            function handlePopupButtonClose() {

                facilityDataModel.Name(undefined);      // 팝업에 기존 이름 보이기 방지
                popupVisible(false);
            }

            function refreshList() {
                CmfacilityTypeDataSource.filter([
                    ["SiteId", "=", BWA.UserInfo.SiteId()]
                ]);
                CmfacilityTypeDataSource.load().done(function (result) {
                    FacilityTypeInfo(result);
                });
                if (selectedTreeItem())
                    $('#facilityTreeView').cwTreeView('reload', selectedTreeItem().parentData);
            }

            function getDoneFunc(messageId) {

                return function () {

                    refreshList();
                    popupVisible(false);
                    utils.toast.show($G(messageId));
                };
            }

            function handlePopupButtonDelete() {

                BWA.db.CmFacility.remove(

                    BWA.DataUtil.pickKeys(facilityDataModel, 'CmFacility')

                ).done(getDoneFunc('successDatabaseDeleteMsg'));
                facilityDataModel.Name(undefined);      // 팝업에 기존 이름 보이기 방지
            }

            function handlePopupButtonSave() {

                var dfd = $.Deferred();
                var isDuplicated = false;
                for (var i = 0; i < FacilityTypeInfo().length; i++) {
                    if (facilityDataModel.toJS().Name == FacilityTypeInfo()[i].Name() && EditNameDev != FacilityTypeInfo()[i].Name()) {
                        isDuplicated = true;
                        break;
                    }
                }
                if (!BWA.DataUtil.isValidInputValue(facilityDataModel.toJS().Name)) {
                    utils.toast.show('저장 혹은 수정 반드시 필수 입력 정보를 모두 입력하셔야 합니다 (앞뒤공백 허용안함)', 'error');
                    return 0;
                }
                else {
                    if (isDuplicated) {
                        utils.toast.show('이미 동일 명칭이 존재합니다.', 'error');
                        return 0;
                    }
                    else {
                        if (isNew()) {
                            facilityDataModel.SiteId(BWA.UserInfo.SiteId());
                            BWA.db.CmFacility.insert(facilityDataModel.toJS()).done(getDoneFunc('successDatabaseInsertionMsg'));

                        }
                        else {

                            BWA.db.CmFacility.update(

                                BWA.DataUtil.pickKeys(facilityDataModel, 'CmFacility'),
                                facilityDataModel.toJS()

                            ).done(getDoneFunc('successDatabaseUpdateMsg'));
                        }
                    }
                }

                facilityDataModel.Name(undefined);      // 팝업에 기존 이름 보이기 방지
            }

            function handleViewShown() {

                refreshList();
                facilityDataModel.SiteId(BWA.UserInfo.SiteId());
                facilityTypeDataSource.load().done(function (dbFacilityTypes) {

                    facilityTypes(dbFacilityTypes);
                });
            }

            return {

                facilityTypes: facilityTypes,
                dataModel: facilityDataModel,

                isNew: isNew,
                isEditMode: isEditMode,
                options: popupOptions,
                toolbarItems: toolbarItems,

                handleViewShown: handleViewShown,

                show: function (facilityJson, EditName) {

                    if (_.isUndefined(facilityJson)) {

                        // 등록
                        isNew(true);
                        isEditMode(true);
                        cancelButtonVisible(false);
                        facilityDataModel.FacilityTypeId(99);
                        facilityDataModel.IsVirtualFacility(true);
                    }
                    else {

                        isNew(false);
                        isEditMode(false);
                        cancelButtonVisible(false);

                        facilityDataModel.fromJS(facilityJson);

                        facilityDataModel.FacilityTypeName(facilityJson['BemsFacilityType/Name']);
                    }
                    EditNameDev = EditName;
                    popupVisible(true);
                }
            };
        }
    }
});