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

#ifndef CDSIncidentFH
#define CDSIncidentFH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <ADODB.hpp>
#include <DB.hpp>
#include "cxCustomData.hpp"
#include "ITSLibF.h"
#include "ITSDbF.h"
//---------------------------------------------------------------------------

/*
*  Incident class
*/
class TItsAutoIncident
{
public :
    TItsAutoIncident(){}
    virtual ~TItsAutoIncident(){}

public :
    String LINK_ID;         //NUMBER(10)	N			링크ID
    String DETC_DT;         //VARCHAR2(14)	N			검지 일시
    String CLCT_SPED_AVRG;  //NUMBER(3)	Y	0		수집 속도 평균
    String ESTM_SPED_AVRG;  //NUMBER(3)	Y	0		예상 속도 평균
    String REAL_YN;         //CHAR(1)	Y	'N'		사실 여부
    String X_CRDN;
    String Y_CRDN;
    String ROAD_NAME;
    String STNAME;
    String EDNAME;
};
//---------------------------------------------------------------------------

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

public:
        String INCD_OCRR_ID;            //돌발상황 발생 ID
        String STRT_LCTN_NM;            //시작 위치 명
        String END_LCTN_NM;             //종료 위치 명
        String OCRR_LCTN_NM;            //발생 위치 명
        String CMTR_GRAD_CD;            //소통 등급 코드
        String INCD_CLSR_LANE;          //돌발상황 차단 차로
        String VMS_DSPL_YN;             //VMS 표출 여부
        String INCD_PRGR_STEP_CD;       //돌발상황 진행 단계 코드
        String INCD_STRT_DT;            //돌발상황 시작 일시
        String INCD_END_PRAR_DT;        //돌발상황 종료 예정 일시
        String LINK_ID;                 //링크ID
        String VMS_INCD_TYPE_CD;        //VMS 돌발유형코드
        String VMS_INCD_DETL_TYPE_CD;   //VMS 돌발세부유형코드

        String VMS_INCD_RSTR_TYPE_CD;
};
//---------------------------------------------------------------------------

/*
*  Incident class
*/
class TItsIncident
{
public:
    TItsIncident();
    virtual ~TItsIncident();
    void Clear();
private:
    bool    FModified;
    bool    FCompleted;

public:
    String INCD_OCRR_ID;          //돌발상황 발생 ID
    String RGST_DT;               //등록 일시
    String INCD_ORGN_CD;          //돌발상황 원본 코드 : IST
    String OCRR_LCTN_NM;          //발생 위치 명
    String X_CRDN;                //X 좌표
    String Y_CRDN;                //Y 좌표
    String INCD_EXPL;             //돌발상황 설명
    String CMTR_GRAD_CD;          //소통 등급 코드 : LTCU
    String IFMR_NM;               //제보자 명
    String INCD_CNFM_MTHD_CD;     //돌발상황 확인 방법 코드 : ICM
    String INCD_CNFM_DT;          //돌발상황 확인 일시
    String INCD_STRT_DT;          //돌발상황 시작 일시
    String INCD_END_PRAR_DT;      //돌발상황 종료 예정 일시
    String INCD_TYPE_CLSF_CD;     //돌발상황 유형 분류 코드 : IDTU
    String INCD_TYPE_CD;          //돌발상황 유형 코드 : ACTU, CRTU, EVTU, WETU 중 하나
    String INCD_TITL;             //돌발상황 제목
    String INCD_SERN_CD;          //돌발상황 심각도 코드 : SRLU
    String DELY_LNGT;             //지체 길이
    String INCD_LNGT;             //돌발상황 길이
    String INCD_OCRR_LANE;        //돌발상황 발생 차로
    String INCD_CLSR_LANE;        //돌발상황 차단 차로
    String TRVL_LMNT_TYPE_CD;     //통행 제한 유형 코드 : PRTU
    String TRUB_VHCL_YN;          //고장 차량 여부
    String FALT_YN;               //낙하물 여부
    String FRWT_YN;               //화재위험물 여부
    String UTIS_CNCT_YN;          //UTIS 연계 여부
    String SMLT_VHCL_UNUM;        //소형 차량 대수
    String MDLT_VHCL_UNUM;        //중대형 차량 대수
    String INJR_PNUM;             //부상자 인원수
    String FTLT_PNUM;             //사망자 인원수
    String WTHR_CD;               //기상 코드 : DFW
    String RESP_LVL_CD;           //대응 수준 코드 : RSL
    String VMS_DSPL_YN;           //VMS 표출 여부
    String INCD_PRGR_STEP_CD;     //돌발상황 진행 단계 코드 : ISS
    String INCD_END_CNFM_MTHD_CD; //돌발상황 종료 확인 방법 코드 : ICM
    String INCD_END_DT;           //돌발상황 종료 일시
    String MBLZ_EQPM_CONT;        //출동 장비 내용
    String MBLZ_PNUM;             //출동 인원수
    String RECR_CONT;             //복구 내용
    String RECR_PERD;             //복구 기간
    String LINK_ID;               //돌발발생 LINK ID

    String DISP_INCD;              //현재 돌발 진행 여부

    void    *FMarker;

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

/*
* Incident Manager
*/
class TItsIncidentManager
{
public:
    TItsIncidentManager();
    virtual ~TItsIncidentManager();

public:
    TItsMap<String, TItsVmsIncident*>   FVmsLists;
    TItsMap<String, TItsAutoIncident*>  FAutoLists;
    TItsMap<String, TItsIncident*>      FLists;
    int                                 FAutoIncident;
public:
    bool LoadFromDb(TADOConnection *ADbConn=NULL);
	bool LoadFromAutoIncident(TADOConnection *ADbConn=NULL);
	bool LoadFromVmsIncident(TADOConnection *ADbConn=NULL);
    bool UpdateIncidentInfo(TItsIncident *AObj, TADOConnection *ADbConn=NULL);
    bool DeleteIncidentLoc(String AIncidId, TADOConnection *ADbConn=NULL);
    bool UpdateIncidentLoc(TItsIncident *AObj, TADOConnection *ADbConn=NULL);
    bool MergeVmsIncidentInfo(String AINCD_OCRR_ID,           // '돌발상황 발생 ID
                              String ASTRT_LCTN_NM,           // '시작 위치 명
                              String AEND_LCTN_NM,            // '종료 위치 명
                              String AOCRR_LCTN_NM,           // '발생 위치 명
                              String ACMTR_GRAD_CD,           // '소통 등급 코드
                              String AINCD_CLSR_LANE,         // '돌발상황 차단 차로
                              String AVMS_DSPL_YN,            // 'VMS 표출 여부
                              String AINCD_PRGR_STEP_CD,      // '돌발상황 진행 단계 코드
                              String AINCD_STRT_DT,           // '돌발상황 시작 일시
                              String AINCD_END_PRAR_DT,       // '돌발상황 종료 예정 일시
                              String ALINK_ID,                // '링크ID
                              String AVMS_INCD_TYPE_CD,       // 'VMS 돌발유형코드
                              String AVMS_INCD_DETL_TYPE_CD,  // 'VMS 돌발세부유형코드
                              String AVMS_INCD_RSTR_TYPE_CD,  // 'VMS 돌발통제코드
                              TADOConnection *ADbConn=NULL);
    bool UpdateVmsIncidentInfo(String AINCD_OCRR_ID, String AINCD_PRGR_STEP_CD, TADOConnection *ADbConn=NULL);
    bool GetNextIncidentId(String ACenterId, String &AIncidentId, TADOConnection *ADbConn=NULL);
};
//---------------------------------------------------------------------------
extern TItsIncidentManager *ItsIncidentManager;
//---------------------------------------------------------------------------

#endif

