$(function() {
    BemsWebApplication.FacilityCheckItem = {
        setupMultiViewInPopup: function(workTypeId, templateId, datagridId, viewModel, selectedFacility, multiViewDataSource) {
            "use strict";

            var refreshList = function() {
                var datagrid = $(['#', datagridId].join('')).dxDataGrid('instance');
                datagrid.refresh();
            }

            var dataSource = BWA.DataUtil.createDataSource({
                dataSourceOptions: {
                    select: [ 
                        'SiteId', 'CheckItemId', 'FacilityCode', 'WorkTypeId', 
                        'CycleUnitId', 'Name', 'IsYesNoResult', 'IsUse', 
                        'FmsWorkCodeCycleUnit/Name', 'FmsWorkCodeType/Name' 
                    ],
                    expand: ['FmsWorkCodeCycleUnit', 'FmsWorkCodeType']                
                },                
            }, 'FmsFacilityCheckItem');
            
            var cycleUnitDataSource = null;
                
            var dataGridOptions = utils.datagrid.defaultOptions({
                dxDataSource: dataSource,
                datagridId: datagridId,
                dbId: 'FmsFacilityCheckItem',
                height: 480,
                columns: [
                    { dataField: 'FmsWorkCodeCycleUnit_Name', caption: $G( 'checkCycleUnit' ), width: '25%', alignment: 'center' },
                    { dataField: 'Name', caption: $G( 'itemName' ), width: '55%', alignment: 'center' },
                    { dataField: 'IsYesNoResult', caption: $G('resultType'), width: '20%', alignment: 'center',
                        customizeText: function(cellInfo) {
                            return cellInfo.value ? $G('yesOrNo') : $G('directInput');
                        }
                    }
                ],
                wordWrapEnabled: true,
                handleDataGridRowClick: function(id, dataGrid, clickRow, popupVisible) {
                    //dataGrid.clearSelection();

                    var data = clickRow.data;
                    
                    var v = viewModel.checkItemMultiView.dataModel;
                    BWA.DataUtil.copyViewModel(data, v);

                    var code = $Code.FacilityCheckItemResultType;
                    v.ResultTypeId(v.IsYesNoResult() ? code.YES_OR_NO : code.DIRECT_INPUT);

                    var mv = viewModel.checkItemMultiView;
                    mv.handleRefreshList(refreshList);

                    var p = mv.popupOptions;
                    p.isNewData(false);
                    p.visible(true);
                }
            });

            selectedFacility.subscribe(function(item) {
                if (_.has(item, 'SiteId') === false ||
                    _.has(item, 'FacilityCode') === false) {
                    return;
                }

                var eq = BWA.DataUtil.constructEqualFilter;
                $(['#', datagridId].join('')).dxDataGrid('instance').filter([
                    eq('SiteId', item.SiteId()),
                    'and',
                    eq('FacilityCode', item.FacilityCode()),
                    'and',
                    eq('WorkTypeId', workTypeId)
                ]);
            });

            multiViewDataSource.push({
                viewModel: viewModel,
                dataGridOptions: dataGridOptions,
                template: templateId,
                
                handleButtonInsert: function() {
                    var p = viewModel.checkItemMultiView.popupOptions;
                    var v = viewModel.checkItemMultiView.dataModel;

                    BWA.DataUtil.resetViewModel(v);
                    v.WorkTypeId(workTypeId);
                    v.FacilityCode(selectedFacility().FacilityCode());
                    v.CycleUnitId(1);
                    v.ResultTypeId(0);

                    p.isNewData(true);
                    p.visible(true);

                    viewModel.checkItemMultiView.handleRefreshList(refreshList);
                },

                handleButtonDelete: function() {
                    var p = viewModel.checkItemMultiView.popupOptions;
                    p.workTypeId(workType);
                    
                },
            });

            if (_.has(viewModel,'checkItemMultiView') === false)
            {
                var dataModel = new BWA.FmsFacilityCheckItemViewModel();

                cycleUnitDataSource = BemsWebApplication.db.createDataSource('FmsWorkCodeCycleUnit');
                cycleUnitDataSource.load().done(function (result) {
                    viewModel.checkItemMultiView.cycleUnitDataSource(result);
                });
                dataModel.ResultTypeId = ko.observable();
                dataModel.ResultTypeId.subscribe(function(value) {
                    if (value === $Code.FacilityCheckItemResultType.YES_OR_NO) {
                        dataModel.IsYesNoResult(true);
                    }
                    else {
                        dataModel.IsYesNoResult(false);
                    }
                });

                viewModel.checkItemMultiView = {
                    dataModel: dataModel,
                    handleRefreshList: ko.observable(),
                    cycleUnitDataSource: ko.observableArray(),
                    resultTypeDataSource: $G.FacilityCheckItemResultType,
                    toolbarItems: [
                        { location: 'before', text: $G('detailInfo') },
                        { location: 'after',widget: 'button', options: { 
                                text: $G('save'), icon: 'save',
                                clickAction: function () {
                                    viewModel.checkItemMultiView.handleSave();
                                }
                            }
                        },
                        { location: 'after', widget: 'button', options: {
                                text: $G('delete'), icon: 'remove', type: 'danger',
                                clickAction: function() {
                                    viewModel.checkItemMultiView.handleDelete();
                                }
                            }
                        },
                        {
                            location: 'after', widget: 'button', options: {
                                text: $G('close'), icon: 'close',
                                clickAction: function () {
                                    viewModel.checkItemMultiView.popupOptions.visible(false);
                                }
                            }
                        }
                    ],
                    popupOptions: {
                        width: '520px',
                        height: 'auto',
                        animation: utils.popup.createAnimation(),
                        closeOnOutsideClick: false,
                        visible: ko.observable(false),

                        //showingAction: handlePopupShowing,
                        isNewData: ko.observable(false),
                        workTypeId: ko.observable(),
                    },
                    handleSave: function () {
                        var mv = viewModel.checkItemMultiView;
                        var p = mv.popupOptions;
                        var v = mv.dataModel;

                        var handleDone = function(successMsg) {
                            return function() {
                                mv.handleRefreshList()();
                                p.visible(false);

                                utils.toast.show($G(successMsg));
                            };
                        };

                        if (p.isNewData()) {
                            BemsWebApplication.db.FmsFacilityCheckItem.insert(v.toJS()).done(handleDone('successDatabaseInsertionMsg'));
                        }
                        else {
                            var keys = BWA.db.extractKeysObject('FmsFacilityCheckItem', v);
                            BemsWebApplication.db.FmsFacilityCheckItem.update(keys, v.toJS()).done(handleDone('successDatabaseEditMsg'));
                        }
                    },
                    handleDelete: function () {
                        var mv = viewModel.checkItemMultiView;
                        var p = mv.popupOptions;
                        var v = mv.dataModel;
                        var keys = BWA.db.extractKeysObject('FmsFacilityCheckItem', v);
                        BemsWebApplication.db.FmsFacilityCheckItem.remove(keys).done(function() {
                            mv.handleRefreshList()();
                            p.visible(false);

                            utils.toast.show($G('successDatabaseDeleteMsg'));
                        });
                    }
                };
            }

        }
    };
 
});