$(function() {
    BemsWebApplication.Factory.WorkOrderPopup = {
        create: function(viewModel, targetFacilities, workOrderDataModel, popupVisible, editObservable, dataGridOptions) {

            var tabIndex = ko.observable(0);
            viewModel.tabsOptionsInWorkOrderPopup = {
                dataSource: [
                    { text: '작업지시' },
                    { text: '대상시설' }
                ],
                selectedIndex: tabIndex
            };
            var id = 'gridFacilityContainerInWorkOrder';

            targetFacilities.subscribe(function(value) {
                //$( '#gridFacilityContainerInWorkRequest' ).dxDataGrid( 'instance' ).refresh();
            });

            viewModel.multiViewOptionsInWorkOrderPopup = {
                dataSource: [
                    {
                        viewModel: viewModel,
                        dataModel: workOrderDataModel,
                        template: 'workOrder'
                    },
                    {
                        viewModel: viewModel,
                        dataGridOptions: $.extend({
                            selection: { mode: 'multiple', allowSelectAll: true }
                        }, dataGridOptions),
                        template: 'targetFacility'
                    }
                ],
                swipeEnabled: true,
                selectedIndex: tabIndex,
                height: '600px'
            };

            viewModel.handleButtonAddFacility = function() {
                viewModel.facilitySearchPopup.show();
            }
            viewModel.handleButtonRemoveFacility = function() {
                var selectedRows = utils.datagrid.getSelectedRowsData(id);
                selectedRows.forEach(function(row) {
                    targetFacilities.remove(row);
                    //var index = targetFacilities.indexOf( row );
                    //if( index >= 0 ) {
                    //    targetFacilities.remove( index );
                    //}
                });
            }

            viewModel.toolbarItemsInWorkOrderPopup = [
                { location: 'before', text: $G('workOrder') },
                { location: 'after', widget: 'button', options: { text: $G('setup'), icon: 'save', clickAction: handleWorkOrderPopupButtonSave } },
                { location: 'after', widget: 'button', options: { text: $G('close'), icon: 'close', clickAction: function() { popupVisible(false); } } }
            ];
            viewModel.popupOptionsInWorkOrder = {
                width: '680px',
                height: 'auto',
                visible: popupVisible,
                closeOnOutsideClick: false,
                animation: utils.popup.createAnimation()
            };
            var selectedFacilityData = ko.observableArray();
            selectedFacilityData.subscribe(function(facilities) {

                facilities.forEach(function(f) {

                    if (targetFacilities().some(function(x) {
                        return f.FacilityCode() === x.FacilityCode();
                    }) === false) {
                        targetFacilities.push(f);
                    }
                });
            });
            viewModel.facilitySearchPopup = BWA.Popup.Facility.create(viewModel, selectedFacilityData, {
                isMultipleSelect: true,
            });

            function handleWorkOrderPopupButtonSave() {

                var $$ = BemsWebApplication;
                var deferred = new $.Deferred();
                if (editObservable()) {
                    var keys = $$.db.extractKeysObject('FmsWorkOrder', workOrderDataModel);
                    $$.db.FmsWorkOrder.update(keys, workOrderDataModel.toJS()).done(function() {
                        popupVisible(false);
                        deferred.resolve(keys);
                    });

                }
                else {
                    workOrderDataModel.SiteId(BWA.UserInfo.SiteId());
                    workOrderDataModel.RequestId(viewModel.dataModel.RequestId());
                    workOrderDataModel.OrderedDate(moment().toDate());
                    workOrderDataModel.OrderUserId(BWA.UserInfo.UserId());
                    $$.db.FmsWorkOrder.insert(workOrderDataModel.toJS()).done(function(values, keys) {

                        viewModel.dataModel.ProgressId($Code.WorkProgress.WorkOrder);
                        viewModel.update(false);

                        deferred.resolve(keys);

                        popupVisible(false);
                        viewModel.popupVisible(false);
                    });
                }

                deferred.promise().done(function(keys) {
                    console.log(keys);
                    BemsWebApplication.api.postWithArray(
                            'FmsWorkOrderToFacility',
                            targetFacilities,
                            $.extend(keys, {
                                FacilityCode: null,
                                ProgressId: $Code.WorkProgress.WorkStandby
                            }), ['ProgressId'])
                        .done(function() {
                            utils.toast.show($G('successDatabaseProcessMsg'));
                        });
                });

            }
        }
    }
});