$(function() {
    'use strict';

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

        create: function(viewModel, selectedTreeItem) {

            var facilityTypeDataSource = BemsWebApplication.db.createDataSource('BemsFacilityType'),
                serviceTypeDataSource = BemsWebApplication.db.createDataSource('BemsServiceType'),
                fuelTypeDataSource = BemsWebApplication.db.createDataSource('BemsFuelType'),
                pointBaseDataDataSource = BemsWebApplication.db.createDataSource('BemsMonitoringPointBaseData'),

                serviceTypes = ko.observableArray(),
                fuelTypes = ko.observableArray(),
                properties = ko.observableArray(),
                valueTypes = $G.ValueTypes,

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

                dataModel = viewModel.dataModel
            ;

            dataModel.FacilityTypeName = ko.observable();
            dataModel.ServiceTypeName = ko.observable();
            dataModel.ValueTypeName = ko.observable();
            dataModel.FuelTypeName = ko.observable();
            dataModel.FacilityName = ko.observable();            
            
            function getDoneFunc(koObservableArray) {

                return function(dbArray) {

                    koObservableArray(dbArray);
                };
            }

            function handleInitializeDataModelValue(dataModel) {

                var item = selectedTreeItem();
                if (item == null) return;
                if (item.depth !== 3) return;

                var facility = item.data;

                dataModel.SiteId(facility.SiteId());
                //dataModel.SiteId(BWA.UserInfo.SiteId()); // hcLee 2016 06 03
                
                dataModel.FacilityCode(facility.FacilityCode());
                dataModel.FacilityTypeId(facility.FacilityTypeId());
                dataModel.FacilityTypeName(facility['BemsFacilityType/Name']());
                dataModel.FacilityName(facility.Name());
                //dataModel.PropertyId(100);
                //dataModel.IsAccumulated(true);

                pointBaseDataDataSource.filter([
                    eq('FacilityTypeId', dataModel.FacilityTypeId())
                ]);
                pointBaseDataDataSource.load().done(getDoneFunc(properties));
            }

            function handleSelectBoxChangeProperty(e) {

                var property = _.find(properties(), function(x) {

                    return x.PropertyId() === e.value;
                });
                if (property) {
                    
                    dataModel.Name(property.Name());
                }
            }

            function handleDataGridRowClick(id, dataGrid, clickRow, popupVisible) {

                var data = clickRow.data;

                var valueType = _.find(valueTypes, function(x) {
                    return x.ValueType === data.ValueType();
                });

                dataModel.FacilityName(data['CmFacility/Name']());
                dataModel.FacilityTypeName(data['BemsFacilityType/Name']());
                dataModel.ServiceTypeName(data['BemsServiceType/Name']());
                dataModel.FuelTypeName(data['BemsFuelType/Name']());
                dataModel.ValueTypeName(valueType.Name);

                popupVisible(true);
            }

            function handleViewShown() {

                serviceTypeDataSource.load().done(getDoneFunc(serviceTypes));
                fuelTypeDataSource.load().done(getDoneFunc(fuelTypes));
            }

            return {

                serviceTypes: serviceTypes,
                fuelTypes: fuelTypes,
                properties: properties,
                valueTypes: valueTypes,

                handleViewShown: handleViewShown,

                handleDataGridRowClick: handleDataGridRowClick,
                handleSelectBoxChangeProperty: handleSelectBoxChangeProperty,
                handleInitializeDataModelValue: handleInitializeDataModelValue,
            };
        }
    }
});