$(function () {
    'use strict';

    BWA.Popup.Equipment = BWA.Popup.Equipment || {};
    BWA.Popup.Equipment.create = function (viewModel, options) {

        options = options || {};
        options.datagridId = options.datagridId || 'equipmentDataGridForSearch';

        var onSelectedEquipments = options.onSelectedEquipments,
            isMultipleSelect = options.isMultipleSelect;

        var dataViewModel = new BemsWebApplication.FmsEquipmentExViewModel(),

            initialized = false,
            gridView,

            popupVisible = ko.observable(false),
            equipmentFactory = BemsWebApplication.Factory.Equipment;
        //dataSource = BWA.DataUtil.createDataSource({ dataSourceOptions: equipmentFactory.getDataSourceForDataGrid() }, 'FmsEquipmentEx');

        var eq = BWA.DataUtil.constructEqualFilter, and = BWA.DataUtil.andFilter;

        // 자재 검색시 나타나는 팝업은 공통 및 자신이 포함된 비즈니스 영역만 해당됨 
        var userInfo = BWA.UserInfo;

        //targetFacilityDataSource.filter([
        //  eq('SiteId', userInfo.SiteId())
        //]);

        var targetFacilityDataSource = BWA.DataUtil.createDataSource({
            dataSourceOptions: {
                store: BemsWebApplication.odata.FmsEquipmentEx,
                select: [
                    'SiteId',
                    'EquipmentId',
                    'Name',
                    'EquipmentTypeId',
                    'WarehouseId',
                    'Unit',
                    'Standard',
                    'AddDate',
                    'UpdateDate',
                    'RegisterUserId',
                    'SupplierName',
                    'SupplierPhoneNo',

                    'EquipmentCodeTypeName',
                    'TotalStockCount',
                    'CurrentStockCount',
                    'RegisterUserName',

                    'WarehouseName',
                ],
                filter: ([
                    eq('SiteId', userInfo.SiteId())
                ]),
            },
            sort: { field: "EquipmentId", desc: true }
        });

        var dataGridOptions = utils.datagrid.defaultOptions({

            dxDataSource: targetFacilityDataSource,
            selectedSourceItem: dataViewModel,
            handleDataGridRowClick: function () {

            },
            columns: [
                { dataField: 'Name', caption: '공기구명', width: '25%', alignment: 'center' },
                { dataField: 'Standard', caption: '규격', width: '25%', alignment: 'center' },
                { dataField: 'WarehouseName', caption: '창고', width: '17%', alignment: 'center' },
                { dataField: 'TotalStockCount', caption: '전체수량', width: '17%', alignment: 'center', format: 'currency' },
                { dataField: 'CurrentStockCount', caption: '보유수량', width: '16%', alignment: 'center', format: 'currency' },
                { dataField: 'Unit', caption: '단위', width: '15%', alignment: 'center', visible: false },
            ],
            wordWrapEnabled: true,
            cellPrepared: BemsWebApplication.Factory.Equipment.cellPrepared
        });

        if (isMultipleSelect) {

            dataGridOptions.selection = { mode: 'multiple', allowSelectAll: true };
            dataGridOptions.handleDataGridRowClick = function () { };
        }
        else {

            dataGridOptions.handleDataGridRowClick = function (id, dataGrid, clickRow) {

                var data = clickRow.data;

                if (!_.isUndefined(onSelectedEquipments)) {

                    onSelectedEquipments([BWA.DataUtil.convertViewModelToJS(data)]);
                    //{
                    //    SiteId: data.SiteId(),
                    //    BusinessFieldId: data.BusinessFieldId(),
                    //    MaterialId: data.MaterialId(),
                    //    MaterialCode: data.MaterialCode(),
                    //    FinalPrice: data.FinalPrice(),
                    //    TradeCompanyId: _.isUndefined(data.TradeCompanyId) ? undefined : data.TradeCompanyId(),
                    //    'FmsMaterialTradeCompany/Name': data['FmsMaterialTradeCompany/Name'],
                    //    Name: data.Name()
                    //}]);
                }

                // TODO : 어기서 데이터가 전체선택시와 단일선택시 어찌 바뀌는가...
                popupVisible(false);
            }
        }

        function handlePopupShown() {

            if (initialized === false) {
                gridView = $('#equipmentDataGridForSearch').dxDataGrid('instance');
                initialized = true;
            }
            gridView.clearSelection();
            gridView.refresh();
            searchView.show();
        }

        function handlePopupButtonSelect() {

            var array = utils.datagrid.getSelectedRowsData(options.datagridId);

            if (!_.isUndefined(onSelectedEquipments)) {

                onSelectedEquipments(array);
            }
            popupVisible(false);
        }

        function handlePopupButtonClose() {
            popupVisible(false);
        }

        var toolbarItems = [
            { location: 'before', text: '자재 선택' },
            { location: 'after', widget: 'button', options: { text: $G('select'), icon: 'save', visible: isMultipleSelect, clickAction: handlePopupButtonSelect } },
            { location: 'after', widget: 'button', options: { text: $G('close'), icon: 'close', clickAction: handlePopupButtonClose } }
        ];

        var popupOptions = {

            width: '720px',
            height: '600px',
            visible: popupVisible,
            closeOnOutsideClick: true,
            //showingAction: handlePopupShowing,
            shownAction: handlePopupShown,
            animation: window.utils.popup.createAnimation()
        };

        var searchView = BWA.Popup.SearchView.create({

            parentPopupId: 'popupSearchEquipment',
            parentPopupVisible: popupVisible,
            searchItems: [
                { id: 'Name' },
                { id: 'Standard' }
            ],

            handleInitializeUpdate: function () {
            },

            handleSearch: function (filter, searchItems) {

                //                filter = [
                //                    eq('SiteId', BWA.UserInfo.SiteId()),
                //                    and,
                //                    [
                //                        eq('BusinessFieldId', BWA.UserInfo.BusinessFieldId()),
                //                        'or',
                //                        eq('BusinessFieldId', 1)
                //                    ],
                //                ].concat(filter)

                //                gridView.filter(filter);
                ////                console.log(filter);
            }
        });

        return {
            dataModel: dataViewModel,
            //dataSource: dataSource,

            popupOptions: popupOptions,

            toolbarItems: toolbarItems,
            dataGridOptions: dataGridOptions,

            searchView: searchView,

            show: function () {
                popupVisible(true);
            }
        };
    };
});