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

#ifndef CDSPrltCtlrFH
#define CDSPrltCtlrFH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <ADODB.hpp>
#include <DB.hpp>
#include "ITSLibF.h"
#include "CDSObjectF.h"
//---------------------------------------------------------------------------
#include "CenterCommF.h"
//---------------------------------------------------------------------------

/*
* 주차장 실시간 정보
*/
class TPrltRtInfr
{
public:
    TPrltRtInfr(){}
    virtual ~TPrltRtInfr(){}

public:
    String  PRLT_CTLR_NMBR;         //	N	NUMBER(10)	    N			주차장 제어기 번호
    String  FLOR_NMBR;              //	N	VARCHAR2(20)	N			층 번호
    String  UPDT_DT;                //	N	VARCHAR2(14)	Y			갱신 일시
    int     GNRL_RMND_PRZN_NUM;     //	N	NUMBER(3)	    Y	0		일반 잔여 주차구역 개수
    int     LGVH_RMND_PRZN_NUM;     //	N	NUMBER(3)	    Y	0		경차 잔여 주차구역 개수
    int     HVVH_RMND_PRZN_NUM;     //	N	NUMBER(3)	    Y	0		대형 잔여 주차구역 개수
    int     EMVH_RMND_PRZN_NUM;     //	N	NUMBER(3)	    Y	0		긴급차량 잔여 주차구역 개수
    int     HNDC_RMND_PRZN_NUM;     //	N	NUMBER(3)	    Y	0		장애인 잔여 주차구역 개수
    int     WMON_RMND_PRZN_NUM;     //	N	NUMBER(3)	    Y	0		여성전용 잔여 주차구역 개수
    int     ELVH_RMND_PRZN_NUM;     //	N	NUMBER(3)	    Y	0		전기차 잔여 주차구역 개수
    int     ETC_RMND_PRZN_NUM;      //	N	NUMBER(3)	    Y	0		기타 잔여 주차구역 개수
};
//---------------------------------------------------------------------------

/*
*  주차장 제어기
*/
class TPrltCtlr : public TCDSObject
{
public:
    TPrltCtlr();
    virtual ~TPrltCtlr();

public:

//182	POT		주차장 운영 구분	Parking Lot Operation Type			Y	
//  1	POT0	POT	공영						Y	
//  2	POT1	POT	민영						Y	
//  3	POT2	POT	해상케이블카						Y	

//183	PFT		주차장 시설 유형 구분	Parking Lot Facility Type			Y	
//  1	PFT0	PFT	노상						Y	
//  2	PFT1	PFT	노외						Y	
//  3	PFT2	PFT	부설						Y	

    String  PRLT_OPER_DVSN_CD;  //	N	VARCHAR2(7)	    Y			주차장 운영 구분 코드
    String  PRLT_TYPE_DVSN_CD;  //	N	VARCHAR2(7)	    Y			주차장 유형 구분 코드
    String  PRLT_TEL;           //	N	VARCHAR2(128)	Y			전화번호
    String  ISTL_LCTN_ADDR;     //	N	VARCHAR2(200)	Y			설치 위치 주소
    int     WHOL_NPLS;          //	N	NUMBER(3)	    Y	0		전체 주차면수
    int     GNRL_NPLS;          //	N	NUMBER(3)	    Y	0		일반 주차면수
    int     LGVH_NPLS;          //	N	NUMBER(3)	    Y	0		경차 주차면수
    int     HVVH_NPLS;          //	N	NUMBER(3)	    Y	0		대형 주차면수
    int     EMVH_NPLS;          //	N	NUMBER(3)	    Y	0		긴급차량 주차면수
    int     HNDC_NPLS;          //	N	NUMBER(3)	    Y	0		장애인 주차면수
    int     WMON_NPLS;          //	N	NUMBER(3)	    Y	0		여성전용 주차면수
    int     ELVH_NPLS;          //	N	NUMBER(3)	    Y	0		전기차 주차면수
    int     ETC_NPLS;           //	N	NUMBER(3)	    Y	0		기타 주차면수
    int     CNGT_NPLS;          //	N	NUMBER(3)	    Y	10		혼잡기준차 주차면수
    String  PRLT_CHARGE_DESC;   //	N	VARCHAR2(512)	Y			요금정보
    String  PRLT_OPER_DESC;     //	N	VARCHAR2(512)	Y			운영정보
    String  PRLT_ETC_DESC;      //	N	VARCHAR2(512)	Y			기타부가정보
    String  REAL_DATA_YN;       //	N	CHAR(1)	        Y			실시간주차정보제공여부
    int     CTLR_CLCT_CYCL;     //	N	NUMBER(3)	    Y	0		제어기 수집 주기
    int     CTLR_STTS_CYCL;     //	N	NUMBER(3)	    Y	0		제어기 상태 주기
    String  CHNG_DT;            //	N	VARCHAR2(14)	Y	to_char(sysdate, 'yyyymmddhh24miss')		정보등록(수정)일자
//실시간주차정보, 일반주차정보
//주차장명
//전화번호
//주소
//지번
//전체주차면(총주차대수, 일반, 경차, 대형, 긴급차량, 장애인, 여성, 기타)
//요금정보
//운영정보
//기타정보
//정보등록(수정)일자
public:
    INT_PARK_STATE   STATE;

public:
    __property String  PRLT_CTLR_NMBR     = { read = CTLR_NMBR,     write = CTLR_NMBR     };
    __property String  PRLT_CTLR_ID       = { read = CTLR_ID,       write = CTLR_ID       };
    __property String  PRLT_NM            = { read = NAME,          write = NAME          };
    __property String  PRLT_CTLR_IP       = { read = CTLR_IP,       write = CTLR_IP       };
    __property int     PRLT_CTLR_PORT     = { read = CTLR_PORT,     write = CTLR_PORT     };
    __property int     PRLT_CTLR_LOCAL_NO = { read = CTLR_LOCAL_NO, write = CTLR_LOCAL_NO };
    __property String  PRLT_TYPE_CD       = { read = TYPE_CD,       write = TYPE_CD       };

};
//---------------------------------------------------------------------------

/*
* Prlt Manager
*/
class TPrltCtlrManager
{
public:
    TPrltCtlrManager();
    virtual ~TPrltCtlrManager();

public:
    TItsMap<String, TPrltCtlr*>    FLists;

public:
    bool LoadFromDb(TADOConnection *ADbConn=NULL);
    bool LoadStatusFromDb(TADOConnection *ADbConn=NULL);

    bool GetNextPrltId(int &ANmbr, int &AId, TADOConnection *ADbConn=NULL);

    bool DeletePrlt(TPrltCtlr *AObj, TADOConnection *ADbConn=NULL);
    bool InsertPrlt(TPrltCtlr *AObj, TADOConnection *ADbConn=NULL);
    bool UpdatePrlt(TPrltCtlr *AObj, TADOConnection *ADbConn=NULL);
    bool MergePrlt(TPrltCtlr *AObj, TADOConnection *ADbConn=NULL);
    bool MergeFcltInfo(TPrltCtlr *AObj, TADOConnection *ADbConn=NULL);
};
//---------------------------------------------------------------------------
extern TPrltCtlrManager *PrltCtlrManager;
//---------------------------------------------------------------------------

#endif

