//---------------------------------------------------------------------------

#ifndef CDSFacilityFH
#define CDSFacilityFH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <ADODB.hpp>
#include <DB.hpp>
#include "cxCustomData.hpp"
#include "LibSTLF.hpp"
#include "ITSDbF.h"
#include "CDSDsrcF.h"
#include "CDSVdsF.h"
#include "CDSAviF.h"
//---------------------------------------------------------------------------

#define state_normal    "0"
#define state_error     "1"
#define state_module    "2"
#define state_collect   "3"

/*
*  Web Camera class
*/
class TItsWebCam
{
public:
    TItsWebCam(){}
    virtual ~TItsWebCam(){}

//COMMENT ON TABLE ITSDBA.TB_WEB_CMRA;        //'웹 카메라';
    String	WEB_CMRA_NMBR;      //'웹 카메라 번호';
    String	WEB_CMRA_ID;        //'웹 카메라 ID';
    String	CMRA_IP;            //'카메라 아이피';
    String	CMRA_PORT;          //'카메라 포트';
    String	STRM_SVR_IP;        //'스트리밍 서버 아이피';
    String	STRM_SVR_PORT;      //'스트리밍 서버 포트';
    String	STRM_SESN_NM;       //'스트리밍 세션 명';
    String	X_CRDN;             //'X 좌표';
    String	Y_CRDN;             //'Y 좌표';
    String	ISTL_LCTN_NM;       //'설치 위치 명';
    String	ISTL_LCTN_ADDR;     //'설치 위치 주소';
    String	EQPM_KIND;          //'장비 종류';
    String	DEL_YN;             //'삭제 여부';
    String	LINK_ID;            //'링크ID';

//COMMENT ON TABLE ITSDBA.TB_WEB_CMRA_STRM IS '웹 카메라 스트리밍';
//COMMENT ON COLUMN ITSDBA.TB_WEB_CMRA_STRM.WEB_CMRA_NMBR IS '웹 카메라 번호';
    String	STRM_RTSP_ADDR;     //'스트리밍 RTSP 주소';
    String	STRM_RTMP_ADDR;     //'스트리밍 RTMP 주소';
    String	STRM_HTTP_ADDR;     //'스트리밍 HTTP 주소';
    String	STRM_STOR_ADDR;     //'스트리밍 저장 주소';

    String  ID;
    String  PSWD;

    void    *FData1;
    void    *FData2;
};
//---------------------------------------------------------------------------

/*
*  Cctv class
*/
class TItsCctv
{
public:
    TItsCctv(){}
    virtual ~TItsCctv(){}

    String	CCTV_MNGM_NMBR;     //CCTV 관리 번호';
    String	CCTV_CTLR_ID;       //CCTV 제어기 ID';
    String	CCTV_CTLR_IP;       //CCTV 제어기 아이피';
    String	CCTV_CTLR_PORT;     //CCTV 제어기 포트';
    String	CCTV_CAPT_IP;       //CCTV 자막기 아이피';
    String	CCTV_CAPT_PORT;     //CCTV 자막기 포트';
    String	CCTV_FIBR_IP;       //CCTV 광장비 아이피';
    String	CCTV_ENCD_IP;       //CCTV 인코더 아이피';
    String	STRM_SVR_IP;        //스트리밍 서버 아이피';
    String	STRM_SVR_PORT;      //스트리밍 서버 포트';
    String	STRM_SESN_NM;       //스트리밍 세션 명';
    String	X_CRDN;             //X 좌표';
    String	Y_CRDN;             //Y 좌표';
    String	ISTL_LCTN_NM;       //설치 위치 명';
    String	ISTL_LCTN_ADDR;     //설치 위치 주소';
    String	CCTV_CHNL;          //CCTV 채널';
    String	DEL_YN;             //삭제 여부';
    String	FRST_REGR_NMBR;     //최초 등록자 번호';
    String	FRST_RGST_DT;       //최초 등록 일시';
    String	LAST_CRPR_NMBR;     //최종 수정자 번호';
    String	LAST_CRCT_DT;       //최종 수정 일시';
    String	LINK_ID;            //링크ID';
    String  NODE_ID;            //노드ID
    String	CCTV_ID;            //공단 CCTV ID';
    String	RELY_PORT;          //연계 포트';
    String	STRM_RTSP_ADDR;
    String	STRM_RTMP_ADDR;
    String	STRM_HTTP_ADDR;
    String  LOCAL_YN;

    //FOR GUMI
    String  CCTV_TYPE;          //	N	VARCHAR2(10)	Y			CCTV유형

    void    *FData1;
    void    *FData2;
};
//---------------------------------------------------------------------------

/*
*  Vms class
*/
class TItsVms
{
public:
    TItsVms(){}
    virtual ~TItsVms(){}

    String VMS_CTLR_NMBR;           //'VMS 제어기 번호';
    String VMS_ID;                  //'VMS ID';
    String VMS_CTLR_ID;             //'VMS 제어기 ID';
    String VMS_NM;                  //'VMS 명';
    String VMS_CTLR_IP;             //'VMS 제어기 아이피';
    String VMS_USAG_TYPE_CD;        //'VMS 용도 유형 코드';
    String VMS_FRM_TYPE_CD;         //'VMS 형식 유형 코드';
    String VMS_TYPE_CD;             //'VMS 유형 코드';
    String VMS_MODL_TYPE_CD;        //'VMS 모듈 유형 코드';
    String VMS_CMNC_PORT;           //'VMS 통신 포트';
    String OPER_MODE;               //'운영 모드';
    String VMS_CMNC_ERR_BASS_VAL;   // 'VMS 통신 오류 기본 값';
    String VMS_NGHT_BRGH_STEP;      //'VMS 야간 휘도 단계';
    String VMS_WEEK_BRGH_STEP;      //'VMS 주간 휘도 단계';
    String VMS_PHSE_CHNG_CYCL;      //'VMS 표출면 변경 주기';
    String VMS_MODL_ERR_RATE;       //'VMS 모듈 오류 율';
    String CMNCFAIL_SLOT_NMBR;      //'통신장애 SLOT 번호';
    String PWER_FAIL_SLOT_NMBR;     //'전원 장애 SLOT 번호';
    String DEL_YN;                  //'삭제 여부';
    String CMTRINFR_CNCT_YN;        //'소통정보 연계 여부';
    String WTHRINFR_CNCT_YN;        //'기상정보 연계 여부';
    String ENVRINFR_CNCT_YN;        //'환경정보 연계 여부';
    String VMS_MAX_PHSE_NUM;        //'VMS 최대 표출면 개수';
    String FRST_REGR_NMBR;          //'최초 등록자 번호';
    String FRST_RGST_DT;            //'최초 등록 일시';
    String LAST_CRPR_NMBR;          //'최종 수정자 번호';
    String LAST_CRCT_DT;            //'최종 수정 일시';
    String PANL_ON_TIME;            //'전광판 ON TIME';
    String PANL_OFF_TIME;           //'전광판 OFF TIME';
    String PANL_PWER_MODE;          //'전광판 전원 모드';
    String BRGH_MODE;               //'휘도 모드';
    String WEB_CMRA_IP;             //'웹 카메라 아이피';
    String STRM_SESN_NM;            //'스트리밍 세션 명';
    String X_CRDN;                  //'X 좌표';
    String Y_CRDN;                  //'Y 좌표';
    String ISTL_LCTN_NM;            //'설치 위치 명';
    String TRFC_STRG_USE_YN;        //'교통 전략 사용 여부';

    String WEB_CMRA_PORT;
    String WEB_CMRA_ID;
    String WEB_CMRA_PSWD;

    //크기
    int     WIDTH;
    int     HEIGHT;
    int     ModHorCnt;
    int     ModVerCnt;

    void    *FData1;
    void    *FData2;
};
//---------------------------------------------------------------------------

/*
*  Rse class
*/
class TItsRse
{
public:
    TItsRse(){}
    virtual ~TItsRse(){}

    String RSEID;
    String INSTDT;
    String CITYCD;
    String REGIONCD;
    String AREACD;
    String RSEIP;
    String COORDX;
    String COORDY;
    String RADIUS1;
    String RADIUS2;
    String COMPCD;
    String LOCATION;
    String RSECONFIGID;
    String OBEPARAMID;
    String PORT;
    String BRIDGE;
    String COMYN;
};
//---------------------------------------------------------------------------

/*
*  Vds class
*/
class TItsFVds
{
public:
    TItsFVds(){}
    virtual ~TItsFVds(){}

    String CTLR_MNGM_NMBR;  //VARCHAR2(20)	N			제어기 관리 번호
    String CTLR_TYPE_CD;    //VARCHAR2(7)	Y			제어기 유형 코드
    String VALD_YN;         //CHAR(1)	Y	'N'		유효 여부
    String X_CRDN;          //NUMBER(11,8)	Y			X 좌표
    String Y_CRDN;          //NUMBER(10,8)	Y			Y 좌표
    String LCTN;            //VARCHAR2(100)	Y			위치
    String TRMN_IP;         //VARCHAR2(20)	Y			단말기 아이피
    String TRMN_PORT;       //VARCHAR2(5)	Y			단말기 포트
    String CTLR_CLCT_CYCL;  //NUMBER(3)	Y			제어기 수집 주기
    String CTLR_STTS_CYCL;  //NUMBER(3)	Y			제어기 상태 주기
    String LOOP_BORD_NUM;   //NUMBER(3)	Y	0		루프 보드 개수
    String DLTR_NMBR;       //VARCHAR2(20)	Y			삭제자 번호
    String DEL_DT;          //VARCHAR2(14)	Y			삭제 일시
    String DEL_YN;          //CHAR(1)	Y	'N'		삭제 여부
    String FRST_REGR_NMBR;  //VARCHAR2(20)	Y			최초 등록자 번호
    String FRST_RGST_DT;    //VARCHAR2(14)	Y			최초 등록 일시
    String LAST_CRPR_NMBR;  //VARCHAR2(20)	Y			최종 수정자 번호
    String LAST_CRCT__DT;   //VARCHAR2(14)	Y			최종 수정  일시
};
//---------------------------------------------------------------------------

/*
*  Avi class
*/
class TItsFAvi
{
public:
    TItsFAvi(){}
    virtual ~TItsFAvi(){}

    String AVI_CTLR_MNGM_NMBR;  //VARCHAR2(20)	N			AVI 제어기 관리 번호
    String AVI_ID;              //VARCHAR2(10)	Y			AVI ID
    String LINK_ID;             //NUMBER(10)	Y			링크 ID
    String AVI_LCTN_NM;         //VARCHAR2(60)	Y			AVI 위치 명
    String AVI_VALD_YN;         //CHAR(1)	Y	'N'		AVI 유효 여부
    String AVI_CTLR_IP;         //VARCHAR2(20)	Y			AVI 제어기 아이피
    String AVI_CTLR_CMNC_PORT;  //VARCHAR2(5)	Y			AVI 제어기 통신 포트
    String AVI_MAIN_CTLR_YN;    //CHAR(1)	Y	'N'		AVI 주 제어기 여부
    String AVI_MNGM_LANE_NUM;   //NUMBER(2)	Y			AVI 관리 차로 개수
    String AVI_CMRA_NUM;        //NUMBER(2)	Y			AVI 카메라 개수
    String AVI_DTCT_NUM;        //NUMBER(2)	Y			AVI 검지기 개수
    String AVI_DTCT_NM;         //VARCHAR2(60)	Y			AVI 검지기 명
    String AVI_CLCT_CYCL;       //NUMBER(3)	Y			AVI 수집 주기
    String AVI_LAMP_AUTO_YN;    //CHAR(1)	Y	'N'		AVI 조명장치 자동 여부
    String AVI_LAMP_ON_HMS;     //VARCHAR2(6)	Y			AVI 조명장치 ON 시각
    String AVI_LAMP_OFF_HMS;    //VARCHAR2(6)	Y			AVI 조명장치 OFF 시각
    String AVI_LAMP_ON_YN;      //CHAR(1)	Y	'N'		AVI 조명장치 ON 여부
    String X_CRDN;              //NUMBER(11,8)	Y			X 좌표
    String Y_CRDN;              //NUMBER(10,8)	Y			Y 좌표
    String RMRK;                //VARCHAR2(600)	Y			비고
    String DEL_YN;              //CHAR(1)	Y	'N'		삭제 여부
    String FRST_REGR_NMBR;      //VARCHAR2(20)	Y			최초 등록자 번호
    String FRST_RGST_DT;        //VARCHAR2(14)	Y			최초 등록 일시
    String LAST_CRPR_NMBR;      //VARCHAR2(20)	Y			최종 수정자 번호
    String LAST_CRCT_DT;        //VARCHAR2(14)	Y			최종 수정 일시
};
//---------------------------------------------------------------------------

/*
*  Dsrc class
*/
class TItsFDsrc
{
public:
    TItsFDsrc(){}
    virtual ~TItsFDsrc(){}

    String ID;              //VARCHAR2(3)	N			아이디
    String RSE_ID;          //VARCHAR2(8)	N			RSE 아이디
    String ROAD_SPOT_ID;    //VARCHAR2(30)	N			도로 지점 아이디
    String LOG_CNNC_ID;     //VARCHAR2(64)	Y			로그 접속 아이디
    String LOG_CNNC_PW;     //VARCHAR2(64)	Y			로그 접속 비밀번호
    String ISTL_LCTN_NM;    //VARCHAR2(40)	Y			설치 위치 명
    String LCTN_X;          //NUMBER(11,8)	Y			위치 X
    String LCTN_Y;          //NUMBER(10,8)	Y			위치 Y
    String IP;              //VARCHAR2(20)	Y			IP
    String PORT;            //VARCHAR2(5)	Y			PORT
    String MNFC_CMPY_CD;    //NUMBER(5)	Y			제조 업체 코드
    String DEL_YN;          //CHAR(1)	Y	'N'		삭제 여부
};
//---------------------------------------------------------------------------

/*
*  EtcFacility class
*/
class TItsRegFacility
{
public:
    TItsRegFacility();
    virtual ~TItsRegFacility();
    void Clear();
private:
public:
    String  Type;
    String  Id;
    String  Name;
    String  DelYn;
    String  UnRegisterd;
    int     GridIndex;
};
//---------------------------------------------------------------------------

/*
*  Facility class
*/
class TItsFacility
{
public:
    TItsFacility();
    virtual ~TItsFacility();
    void Clear();
private:
    int     FEditMode;
    bool    FModified;
    bool    FCompleted;

public:
    String FCLT_ID;		    // FCLT_ID VARCHAR(50 BYTE) NOT NULL,	'시설물 ID';
    String RFID_ID;		    // RFID_ID VARCHAR(50 BYTE) NOT NULL,	'시설물 ID';
    String FCLT_TYPE;		// FCLT_TYPE VARCHAR(7 BYTE) NOT NULL, '시설물유형';
    String FCLT_LCTN;		// FCLT_LCTN VARCHAR(100 BYTE),        '시설물 위치';
    String RSCE_YN;		    // RSCE_YN CHAR(1 BYTE) DEFAULT 'N',   '현장자산유무';
    String MDL_NM;          // MDL_NM VARCHAR(30 BYTE),            '모델명';
    String USE_YEAR;		// USE_YEAR NUMBER(3),                 '사용년수';
    String INWR_DT;		    // INWR_DT VARCHAR(14 BYTE),           '입고일시';
    String OTWR_DT;		    // OTWR_DT VARCHAR(14 BYTE),           '출고일시';
    String ISTL_DT;		    // ISTL_DT VARCHAR(14 BYTE),           '설치일시';
    String TAKT_DT;		    // TAKT_DT VARCHAR(14 BYTE),           '반출일시';
    String TAKT_RESN;		// TAKT_RESN VARCHAR(100 BYTE),        '반출사유';
    String TAKN_DT;		    // TAKN_DT VARCHAR(14 BYTE),           '반입일시';
    String ABDN_DT;		    // ABDN_DT VARCHAR(14 BYTE),           '폐기일시';
    String ADTN_NM;		    // ADTN_NM VARCHAR(30 BYTE),           '추가자명';
    String ADTN_DT;		    // ADTN_DT VARCHAR(14 BYTE),           '추가일시';
    String CHNG_NM;		    // CHNG_NM VARCHAR(30 BYTE),           '변경자명';
    String CHNG_DT;		    // CHNG_DT VARCHAR(14 BYTE),           '변경일시';
    String AMT;			    // AMT NUMBER(15),                     '금액';
    String DEL_YN;		    // DEL_YN CHAR(1 BYTE) DEFAULT 'N',    '삭제여부';
    String ISTL_CMPY_ID;	// ISTL_CMPY_ID VARCHAR(30 BYTE),      '설치업체ID';
    String MNFC_CMPY_ID;	// PRDC_CMPY_ID VARCHAR(30 BYTE)       '제조업체ID';

    String ISTL_LCTN_ADDR;  // '설치 위치 주소'

    String FCommStatus;     // 장비 통신상태값
    String FDoorStatus;     // 장비 Door상태값
    String FComm;
    String FDoor;
    String FCBoxTmpr;

    int    FCollCntBase;
    int    FCollCntCurr;
    bool   FCollError;

    String Sts00;
    String Sts01;
    String Sts02;
    String Sts03;
    String Sts04;
    String Sts05;
    String Sts06;
    String Sts07;
    String Sts08;
    String Sts09;
    String Sts10;

    String Deleted;         // 마스터정보가 삭제된것
	int    GridIndex;	    // 메인폼에 뿌려지는 그리드 인덱스
    int    StatusGridIndex;

protected:

public:
    __property bool   Modified  = {read = FModified};
    __property bool   Completed = {read = FCompleted, write = FCompleted};
 	__property int    EditMode  = {read = FEditMode,  write = FEditMode };
};
//---------------------------------------------------------------------------

class TFacilityStatus
{
public:
    TFacilityStatus()
    {
        Type   = "";
        Total  = 0;
        Normal = 0;
        Error  = 0;
        Module = 0;
        Collect= 0;
    };
    virtual ~TFacilityStatus() {};

    String Type;
    int    Total;
    int    Normal;
    int    Error;
    int    Module;
    int    Collect;
};
//---------------------------------------------------------------------------


class TItsBit
{
public:
    TItsBit(){}
    virtual ~TItsBit(){}

    String FCLT_ID;
    String FCLT_LCTN;
    String BIT_ID;
    String X_CRDN;
    String Y_CRDN;

    String STOP_ID;
    String STOP_EXPLAIN;
    String LINK_ID;

    String BIT_TYPE;
    int    FAN_MIN_TEMPERATURE;
    int    FAN_MAX_TEMPERATURE;
    int    HEATER_MIN_TEMPERATURE;
    int    HEATER_MAX_TEMPERATURE;
    String INSTALL_STOP_ID;
    String SERVICE_ID;
    String STOP_TYPE;
    String STOP_NAME;
    String STOP_SHORTNAME;

    String DEL_YN;
};
//---------------------------------------------------------------------------

class TItsSig
{
public:
    TItsSig(){}
    virtual ~TItsSig(){}

    String FCLT_ID;
    String FCLT_LCTN;
    String SIG_ID;
    String X_CRDN;
    String Y_CRDN;

    String MDL_NM;
    String DEL_YN;
};
//---------------------------------------------------------------------------

class TItsSigDet
{
public:
    TItsSigDet(){}
    virtual ~TItsSigDet(){}

    String FCLT_ID;
    String FCLT_LCTN;
    String SDET_ID;
    String X_CRDN;
    String Y_CRDN;
    String SIG_ID;

    String MDL_NM;
    String DEL_YN;
};
//---------------------------------------------------------------------------

class TItsPis
{
public:
    TItsPis(){}
    virtual ~TItsPis(){}

    String FCLT_ID;
    String FCLT_LCTN;
    String PIS_ID;
    String X_CRDN;
    String Y_CRDN;
    String SIG_ID;

    String MDL_NM;
    String DEL_YN;
};
//---------------------------------------------------------------------------

class TItsPcs
{
public:
    TItsPcs(){}
    virtual ~TItsPcs(){}

    String FCLT_ID;
    String FCLT_LCTN;
    String PCS_ID;
    String X_CRDN;
    String Y_CRDN;
    String SIG_ID;

    String MDL_NM;
    String DEL_YN;
};
//---------------------------------------------------------------------------

/*
* Facility Manager
*/
class TItsFacilityManager
{
public:
    TItsFacilityManager();
    virtual ~TItsFacilityManager();

public:
    String                      CenterId;
    int                         FLocalCctvCnt;

    ListMap<TItsWebCam>         FWebCamLists;
    ListMap<TItsCctv>           FCctvLists;
    ListMap<TItsVms>            FVmsLists;
    ListMap<TItsRse>            FRseLists;

    ListMap<TItsVds>            FVdsLists;
    ListMap<TItsAvi>            FAviLists;
    ListMap<TItsDsrc>           FDsrcLists;

    ListMap<TItsBit>            FBitLists;
    ListMap<TItsSig>            FSigLists;
    ListMap<TItsSigDet>         FSigDetLists;

    ListMap<TItsPis>            FPisLists;
    ListMap<TItsPcs>            FPcsLists;

    ListMap<TItsRegFacility>    FRegLists;
    ListMap<TItsFacility>       FLists;

    ListMap<TFacilityStatus>    FListStatus;

public:
    void SetCenterId(String ACenterId);
    bool LoadFromDb(TADOConnection *ADbConn=NULL);
    
    bool LoadFacilityReg(TADOConnection *ADbConn=NULL);
    bool LoadFacilityMaster(TADOConnection *ADbConn=NULL);

    bool LoadFacilityWebCam(TADOConnection *ADbConn=NULL);
    bool LoadFacilityCctv(TADOConnection *ADbConn=NULL);
    bool LoadFacilityVms(TADOConnection *ADbConn=NULL);
    bool LoadFacilityRse(TADOConnection *ADbConn=NULL);

    bool LoadFacilityVds(TADOConnection *ADbConn=NULL);
    bool LoadFacilityAvi(TADOConnection *ADbConn=NULL);
    bool LoadFacilityDsrc(TADOConnection *ADbConn=NULL);

    bool LoadFacilityBit(TADOConnection *ADbConn=NULL);
    bool LoadFacilitySig(TADOConnection *ADbConn=NULL);
    bool LoadFacilitySigDet(TADOConnection *ADbConn=NULL);

    bool LoadFacilityPvms(TADOConnection *ADbConn=NULL);
    bool LoadFacilityPvds(TADOConnection *ADbConn=NULL);

    bool CheckFacility();

    bool LoadFacilityStatusFromDb(TADOConnection *ADbConn=NULL);
    bool LoadDsrcCollectStatusFromDb(TADOConnection *ADbConn=NULL);
    bool LoadVdsCollectStatusFromDb(TADOConnection *ADbConn=NULL);
    bool LoadAviCollectStatusFromDb(TADOConnection *ADbConn=NULL);
};
//---------------------------------------------------------------------------
extern TItsFacilityManager *ItsFacilityManager;
//---------------------------------------------------------------------------

#endif

