(function (global) {
    'use strict';

    var code = global.$Code = {
        g_fuelTypes: [],
        Facility: {
            //UPPER_BOUND: 100 // 가상 시설 코드의 상한값(100이하는 모두 가상시설로 취급)
            UPPER_BOUND: 0 // 가상 시설 코드의 상한값(100이하는 모두 가상시설로 취급) -> 2016 12 28 hcLee 수정, typeId를 이용하기전 예전의 잘못된 임시코드로 의심됨
        },
        IsUse: { // 추가
            Use: true,
            NonUse: false
        },
        // for formula calculation
        TimeIntervalType: {
            MIN: 0, // peak조회 떄문에 2016 03 31추가
            QUARTERMIN: 1,
            HOUR: 2,
            DAY: 3,
            MONTH: 4,
            YEAR: 5
        },
        FacilityCode: {
            ELECTRICITY: 1,
            GAS: 2,
            WATER: 3,
            OUTDOOR: 4, // ????????
        },
        TimeType: {
            MIN: 0,
            QUARTERMIN: 1,
            HOUR: 2,     // 시간별
            DAY: 3,      // 일별
            MONTH: 4,    // 월별
            YEAR: 5,      // 년별
            NONE: 6
        },
        FuelType: {
            ELECTRICITY: 1, // 전기
            GAS: 2,         // 가스
            WATER: 3,       // 수도        
        },
        FacilityTypeActTime: {
            AIR_HANDLING: 32,
            REFRIGERATOR: 17,
            REFRIGERATOR_TOP: 11,
            BOILER: 9,
            PUMP: 10
        },
        FacilityType: {
            AIR_HANDLING: 1,   // 공조기
            REFRIGERATOR: 2,    // 냉동기
            ICESTOREAIR: 3,    // 축열조 (빙축열)
            REFRIGERATOR_TOP: 4, //냉각탑 (추가)
            PUMP: 5,//펌프(추가)
            EARTH: 7, // 지열시스템

            WATER_R: 9, // 우수
            WATER_H: 10, // 중수
            WATER_U: 11, // 지하저수
            Digestion_tank: 33, //소화수조
            HEAT_EXCHANGER: 13, // 온열원 (열교환기,중온수열교환기)
            BOILER: 8,//BOILER:14, 기존 14, 이상 일단 8로 수정

            GREEN_ENERGY: 22, // 신재생
            ACU: 31, //ACU

            ELECTRICITY: 100,    // 전기
            GAS: 101,            // 가스
            WATER: 102,          // 수도
            OUTDOOR: 103,          // 외기
        },
        ValueType: {
            AI: 0,
            AO: 1,
            BI: 2,
            BO: 3,
            MI: 4,
            MO: 5,
        },
        EmploymentType: {
            Regular: 1,
            Irregular: 2
        },
        EmploymentStatus: {
            InOffice: 1,
            LeaveOfAbsence: 2,
            Retirement: 3
        },
        // 점검 항목 결과 유형
        FacilityCheckItemResultType: {
            YES_OR_NO: 0,
            DIRECT_INPUT: 1
        },
        // 점검 항목 결과 유형
        FacilityCheckItemYesNoResult: {
            YES: 0,
            NO: 1
        },
        // FmsMaterialCodeProgress
        PurchaseProgress: {
            PURCHASE_REQUEST: 1,      // 구매신청
            PURCHASE_REQUEST_APPROVAL: 2,      // 신청승인
            PURCHASE_ORDER_REQUEST: 3,      // 발주요청
            MATERIAL_STORED: 4,      // 자재입고
            MATERIAL_STORED_APPROVAL: 5       // 입고승인
        },
        // FmsWorkCodeProgress
        WorkProgress: {
            WORK_PLAN: 1,       // 작업계획   - 실행계획상태
            WORK_POSTPONE: 2,   // 작업보류
            WORK_STANDBY: 3,    // 작업대기
            WORKING: 4,         // 작업중
            WORK_COMPLETE: 5,   // 작업완료
            WORK_CONFIRM: 6,     // 작업확인
            WORK_HOLD: 7     // 작업보류
        },
        // FmsWorkCodeType
        WorkType: {
            REGULAR_CHECK: 1,   // 정기점검 
            LEGAL_CHECK: 2,     // 법정검사 
            CIVIL_COMPLAINT: 3, // 민원
            SI_ALERT: 4, // SI 알람
            INNER_CHECK: 5 // 내부점검
        },
        EmergencyLevel: {
            Emergency: 1,       // 긴급-A
            Normal: 2,          // 일반-B
            Improvement: 3,     // 개선-C
        },
        // FmsWorkCodeHolidayWorkType
        HolidayWorkType: {
            Work: 1,        // 휴일 작업
            NextDayWork: 2, // 익일 작업
            NotWork: 3,     // 작업 안 함
        },
        CycleType: {
            Regularly: 1,      // 정기
            Anytime: 2         // 수시
        },
        // FmsFacilityCodeCycleUnit
        CycleUnit: {
            Daily: 1,        // 일간 
            Weekly: 2,       // 주간 
            Monthly: 3,      // 월간 
            Quaterly: 4,     // 분기 
            HalfYearly: 5,   // 반기 
            Yearly: 6,       // 년간 
        },

        // 관제점 위치 설정 시 할당이 되지 않은 경우의 ID, 화면에 표시 X
        LocationDefaultId: {
            BUILDING_ID: 0,
            FLOOR_ID: 0,
            ZONE_ID: 0,
        },

        // CmFileCategory : 정적 데이터로 파일 카테고리 목록
        FileCategory: {
            FACILITY: 1,
            DRAWING: 2,
            MATERIAL: 3,
            PURCHASE_ORDER: 4,
            CONSTRUCTION: 5,
            ACCIDENT: 6,
            MANUAL: 7,
            ANNOUNCEMENT: 8,
            REPORT: 9, // 2016 07 26 hcLee 추가
            WORK: 10, // 2018 02 01 hcLee 추가
            EQUIPMENT: 11, // 2019 02 26 황의현 추가
            FLOOR: 12 // 2019 06 10 kgPark 추가
        },

        BusinessField: {
            COMMON: 1       // 업무분야가 '공통'인 것에 한에서만 미리 정해져 있다.
        }
    };

    var facilityType = code.FacilityType;
    var f = code.Formula = {};

    // 공조기
    f[facilityType.AIR_HANDLING] = {
        COLD_WATER_CALORIE: 1,  // 열량이 아니라 유량
        HOT_WATER_CALORIE: 2, // 열량이 아니라 유량
        COLD_WATER_ATFW: 3,
        HOT_WATER_ATFW: 4,
        //OUTDOOR_TEMPERATURE: 5,
        //CONSUMPTION_ELECTRICITY: 6

        IN_TEMP: 5, // 온수코일 입구온도
        OUT_TEMP: 6, // 온수코일 출구온도
        COLD_ELECTRICITY: 7, // 냉방소비전력
        HOT_ELECTRICITY: 8, // 난방소비전력

        COLD_VOPEN: 9, // 냉방밸브개도율
        HOT_VOPEN: 10, // 난방밸브개도율

        COLD_IN_TEMP: 11, // 냉수코일 입구온도
        COLD_OUT_TEMP: 12, // 냉수코일 출구온도

        F_TEMP: 13,  // 공조기 온도(환기)      2015 07 10 추가 // 실내온도
        F_HUMY: 14,  // 공조기 습도(환기)      2015 07 10 추가 // 실내습도
        CO2: 15, // CO2     2015 07 10 추가

        // 2015 08 04 제어를 위한 코드 추가됨
        ENTHALPY_ONOFF: 16,
        DUTYCYCLE_ONOFF: 17,
        EFFI_ONOFF: 18,
        CO2_ONOFF: 19,
        TEMP_SET: 20,  // 목표,설정온도

        A21: 21, // 냉수 열량
        A22: 22, // 온수 열량
        A23: 23, // 급기휀 소비전력
        A24: 24, // 환기휀 소비전력
        A25: 25, // 급기휀 주파수
        A26: 26, // 환기휀 주파수

        S_TEMP: 27, //급기온도
        M_TEMP: 28,//혼합 온도
        S_HUMY: 30,//급기습도
        CO: 34,//CO
        DUST: 35,//미세먼지
        OZONE: 36,//오존
        S_VOLUME: 37,//급기풍량
        M_OPENING_RATE: 38, // 혼합댐퍼개도율
        ONOFF: 39, //공조기 기동상태
        DUTYCYCLE_CHECK: 40, // 절전사이클 제어 확인
        ENTHALPY_CHECK: 41 // 절전사이클 제어 확인
    };

    //냉동기
    f[facilityType.REFRIGERATOR] = {
        COP: 1,
        LOAD_RATE: 2,
        COOLING_APPROACH: 3,
        RATED_CAPACITY: 4,
        CONSUMPTION_ELECTRICITY: 5,
        COOLANT_INPUT_TEMPERATURE: 6,
        GAS: 7, // 2015 04 23 추가시작

        PUMP_KW: 8, //순환펌프 소비전력
        COOL_ABTY: 9, //  냉방능력

        ATF: 10, //  ATF (ATF와 외기온도용)

        EFFI: 11, // 효율 (시간별 냉각탑 효율 분석)
        SW: 12, // 보급수 유량  (시간별 냉각탑 효율 분석)

        COOLANT_OUTPUT_TEMPERATURE: 13,
        H_TEMPERATURE: 14, // 습구온도

        // 2016 02 29
        R15: 15, // 냉열원 생산열량
        R16: 16, // 냉각탑 소비전력
        R17: 17, // 냉수펌프 소비전력
        R18: 18, // 냉각수펌프 소비전력
        R19: 19, // 냉각탑인버터 주파수
        R20: 20, // 냉수펌프인버터 주파수
        R21: 21, // 냉각수펌프인버터 주파수

        R22: 22, // /쿨링레인지
    };

    //지열시스템
    f[facilityType.EARTH] = {
        COP: 1, // 지열시스템 COP
        LOAD: 2, //부하율
        IN_TEMP: 3, // 냉온수 공급온도
        OUT_TEMP: 4,  //냉온수 환수온도
        KW: 5, //소비전력
        GREEN: 6, // 신재생생산량 kcal 2016 03 08 추가
    };

    //보일러
    f[facilityType.BOILER] = {
        KCAL: 1, // 보일러능력
        FUEL_USE: 2, //연료사용량
        EFFI: 3, // 효율

        F_O2: 4,  //연소공기 산소농도
        E_O2: 5, //배기가스 산소농도
        AIRFACT: 6, //공기과잉율

        ELEC: 7,
        FIRE: 8, // 발열량
        COP: 9, // 

        SYS_EFFI: 10, //	시스템 효율
        LOAD: 11, // 부하율
        PUMP_KW: 12, // 12	순환펌프 소비전력
        PUMP_HZ: 13	//순환펌프 주파수
    };

    //축열조 (빙축열)
    f[facilityType.ICESTOREAIR] = {
        COLD_AV: 1, //냉동능력
        EFFI: 2, // 효율

        LOAD: 3,  //부하율
        COLD_KCAL: 4, //냉수열량
        VLINE_KCAL: 5, //브라인열량

        ELEC: 6, // 소비전력
        SW: 7, // 보급수 유량
        COP: 8, // 

        COOLANT_INPUT_TEMPERATURE: 9, // 냉각수 입구온도
        COOLANT_OUTPUT_TEMPERATURE: 10, // 냉각수 출구 온도
        H_TEMPERATURE: 11, // 습구온도

        COOLING_APPROACH: 12,
        KCAL: 13,  // 축열량
        //2016 02 29
        COP1: 14,  // 냉동기1 COP
        COP2: 15,  // 냉동기2 COP
        LOAD1: 16,  // 냉동기1 부하율
        LOAD2: 17,  // 냉동기2 부하율
    };

    // 온열원 (열교환기,중온수열교환기)
    f[facilityType.HEAT_EXCHANGER] = {
        EFFI: 1, // 효율
        R_EFFI: 2, // 반송효율
        ELEC: 3, // 소비전력

        S_WATER_TEMP: 4, // 급수온도
        R_WATER_TEMP: 5, // 환수온도

        SW: 6,// 유량
        LIFT: 7, //양정

        ATF: 8,
    };

    //우수
    f[facilityType.WATER_R] = {
        SW: 1, // 시수
        RW: 2, // 우수
        LEV: 3, // 저장조 수위
        LEV2: 4 // 처리조 수위 // 2016 07 13 추가
    };

    //중수
    f[facilityType.WATER_H] = {
        SW: 1, // 시수
        HW: 2, // 중수
        LEV: 3, // 수위 / 2016 07 13 추가
    };

    //지하저수
    f[facilityType.WATER_U] = {
        SW: 1, // 시수
        //HW: 2, // 
        LEV: 2, // 수위 / 2016 07 13 추가
    };

    //신재생에너지
    f[facilityType.GREEN_ENERGY] = {
        ELEC: 1, // 전력발전량
    };

    f[facilityType.ELECTRICITY] = {
        TOTAL_ELECTRICITY_AMOUNT: 1,
        CONTRACT: 2, // 계약전력
        TARGET: 3, // 목표전력
        WEEK_AVG: 4, // 요일평균
        CURRENT: 5, // 현재전력
        LOAD: 6, // 부하율
        AVG: 7, // 평균
        DAY_MAX: 8 // 일별최대전력
    };
    f[facilityType.GAS] = {
        TOTAL_GAS_AMOUNT: 1
    };

    f[facilityType.WATER] = {
        TOTAL_WATER_AMOUNT: 1
    }

    f[facilityType.OUTDOOR] = {
        TEMPERATURE: 1,
        HUMIDITY: 2,
    }

    //code.getFormulaCode = function(facilityTypeId) {
    //    var f = _.find(this.Formula, function(x) {
    //        return (x.facilityTypeId === facilityTypeId);
    //    });
    //    if (_.isEmpty(f)) return null;
    //    return f.formulas;
    //};
})(this);