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

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

#define     VILG_NONE       "-"
#define     VILG_WARNING    "주의보"
#define     VILG_ALARM      "경보"

#define     ATMP_NONE       "진행중"
#define     ATMP_GOOD       "좋음"
#define     ATMP_NORMAL     "보통"
#define     ATMP_BAD        "나쁨"
#define     ATM_VERY_BAD    "매우나쁨"

/*
* TB_VILG_SHPR(초단기실황)
*/
typedef struct tagVilgShpr
{
    String	VILG_FRCS_ZONE_CD;  //	N	NUMBER(14)	    N			동네 예보 구역 코드
    String	ANNC_DT;            //	N	VARCHAR2(14)	Y			발표 일시
    String	TMPR;               //	N	NUMBER(6,3)	    Y			온도
    String	PRAM_1HH;           //	N	NUMBER(5,2)	    Y	0		강수량 1시간
    String	ATMP_STTS;          //	N	NUMBER(2)	    Y			대기 상태
    String	ESWS_WNSP;          //	N	NUMBER(5,2)	    Y	0		동서 풍속
    String	NRST_WNSP;          //	N	NUMBER(5,2)	    Y	0		남북 풍속
    String	HMDT;               //	N	NUMBER(5,2)	    Y	0		습도
    String	PRCP_STTS;          //	N	NUMBER(3)	    Y	0		강수 상태
    String	THND_STTS;          //	N	NUMBER(2)	    Y			낙뢰 상태
    String	WNDR;               //	N	NUMBER(2)	    Y			풍향
    String	WNSP;               //	N	NUMBER(5,2)	    Y	0		풍속

    String  ATMP_STTS_NM;       // 하늘상태 - 맑음(1), 구름조금(2), 구름많음(3), 흐림(4)
    String  ESWS_WNSP_NM;       // 동서바람성분(m/s) - 동(+), 서(-)
    String  NRST_WNSP_NM;       // 남북바람성분(m/s) - 북(+), 남(-)
    String  PRCP_STTS_NM;       // 강수형태 - 없음(0), 비(1), 비/눈(2), 눈(3)
    String  THND_STTS_NM;       // 낙뢰 - 없음(0), 있음(1)
    String	WNDR_NM;            //	N	NUMBER(2)	    Y			풍향

    String  WNSP_ALARM;         // 강풍알람

} VILG_SHPR;

/*
*  VilgFrcs class
*/
class TItsVilgFrcs
{
public:
    TItsVilgFrcs() {};
    ~TItsVilgFrcs() {};

private:

public:
    String	VILG_FRCS_ZONE_CD;      //	N	NUMBER(14)	    N			동네 예보 구역 코드
    String	VILG_FRCS_ZONE_NM;      //	N	VARCHAR2(40)	Y			동네 예보 구역 명
    String	X_CRDN;
    String	Y_CRDN;

    String	ANNC_DT;                //	N	VARCHAR2(14)	N			발표 일시
    String	ORD;                    //	N	NUMBER(3)	    N	0		순서
    String	HH;                     //	N	NUMBER(3)	    Y	0		시간
    String	DD;                     //	N	NUMBER(3)	    Y	0		일
    String	PRST_TMPR;              //	N	NUMBER(6,3)	    Y			현재 온도
    String	HGHS_TMPR;              //	N	NUMBER(6,3)	    Y			최고 온도
    String	LWST_TMPR;              //	N	NUMBER(6,3)	    Y			최저 온도
    String	ATMP_STTS;              //	N	NUMBER(2)	    Y			대기 상태
    String	WTCD_KOR_NM;            //	N	VARCHAR2(20)	Y			날씨 한글 명
    String	PRCP_STTS;              //	N	NUMBER(3)	    Y	0		강수 상태
    String	WTCD_ENGL_NM;           //	N	VARCHAR2(20)	Y			날씨 영문 명
    String	PRCP_PR;                //	N	NUMBER(5,2)	    Y	0		강수 확률
    String	ESTM_PRAM_12HH;         //	N	NUMBER(5,2)	    Y	0		예상 강수량 12시간
    String	ESTM_SNOW_AMUT_12HH;    //	N	NUMBER(5,2)	    Y	0		예상 눈 량 12시간
    String	WNSP;                   //	N	NUMBER(5,2)	    Y	0		풍속
    String	WNDR;                   //	N	NUMBER(2)	    Y			풍향
    String	WNDR_KOR_NM;            //	N	VARCHAR2(20)	Y			풍향 한글 명
    String	WNDR_ENGL_NM;           //	N	VARCHAR2(20)	Y			풍향 영문 명
    String	HMDT;                   //	N	NUMBER(5,2)	    Y	0		습도
    String	ESTM_PRCP_AMUT_6HH;     //	N	NUMBER(5,2)	    Y	0		예상 강수 량 6시간
    String	ESTM_SNOW_AMUT_6HH;     //	N	NUMBER(5,2)	    Y	0		예상 눈 량 6시간

    String  WTCD_KOR_CD;

    String  PRCP_ALARM;             // 호우알람
    String  SNOW_ALARM;             // 대설알람

    VILG_SHPR   shpr;

protected:

public:
};
//---------------------------------------------------------------------------

/*
* TB_ATMP_PLTN_RT_PNST(대기 오염 실시간 현황)
*/
typedef struct tagAtmpPltnRtPnst
{
    String	ATMP_STTN_NM;   //	N	VARCHAR2(30)	N			측정소 명
    String	MSRM_DT;        //	N	VARCHAR2(14)	Y			측정 일시
    String	MSRM_SYST_NM;   //	N	VARCHAR2(10)	Y			측정 시스템 명
    String	CO_VAL;         //	N	VARCHAR2(10)	Y			CO 값
    String	SO2_VAL;        //	N	VARCHAR2(10)	Y			SO2 값
    String	NO2_VAL;        //	N	VARCHAR2(10)	Y			NO2 값
    String	O3_VAL;         //	N	VARCHAR2(10)	Y			O3 값
    String	PM10_VAL;       //	N	VARCHAR2(10)	Y			PM10 값
    String	PM10_24HH_VAL;  //	N	VARCHAR2(10)	Y			PM10 24시간 값
    String	PM25_VAL;       //	N	VARCHAR2(10)	Y			PM25 값
    String	PM25_24HH_VAL;  //	N	VARCHAR2(10)	Y			PM25 24시간 값
    String	INTG_ATMP_VAL;  //	N	VARCHAR2(10)	Y			통합 대기 값
    String	INTG_ATMP_GRAD; //	N	VARCHAR2(10)	Y			통합 대기 등급
    String	SO2_GRAD;       //	N	VARCHAR2(10)	Y			SO2 등급
    String	CO_GRAD;        //	N	VARCHAR2(10)	Y			CO 등급
    String	O3_GRAD;        //	N	VARCHAR2(10)	Y			O3 드급
    String	NO2_GRAD;       //	N	VARCHAR2(10)	Y			NO2 등급
    String	PM10_24HH_GRAD; //	N	VARCHAR2(10)	Y			PM10 24시간 등급
    String	PM25_24HH_GRAD; //	N	VARCHAR2(10)	Y			PM25 24시간 등급
    String	PM10_1HH_GRAD;  //	N	VARCHAR2(10)	Y			PM10 1시간 등급
    String	PM25_1HH_GRAD;  //	N	VARCHAR2(10)	Y			PM25 1시간 등급

    String	INTG_ATMP_GRAD_NM; //	N	VARCHAR2(10)	Y			통합 대기 등급
    String	SO2_GRAD_NM;       //	N	VARCHAR2(10)	Y			SO2 등급
    String	CO_GRAD_NM;        //	N	VARCHAR2(10)	Y			CO 등급
    String	O3_GRAD_NM;        //	N	VARCHAR2(10)	Y			O3 드급
    String	NO2_GRAD_NM;       //	N	VARCHAR2(10)	Y			NO2 등급
    String	PM10_24HH_GRAD_NM; //	N	VARCHAR2(10)	Y			PM10 24시간 등급
    String	PM25_24HH_GRAD_NM; //	N	VARCHAR2(10)	Y			PM25 24시간 등급
    String	PM10_1HH_GRAD_NM;  //	N	VARCHAR2(10)	Y			PM10 1시간 등급
    String	PM25_1HH_GRAD_NM;  //	N	VARCHAR2(10)	Y			PM25 1시간 등급
    String	UPDT_DT;           // 	N	VARCHAR2(14)	Y			갱신 일시
} ATMP_PLTN_RT_PNST;

/*
*  AtmpPltn class(미세먼지 클래스)
*/
class TItsAtmpPltn
{
public:
    TItsAtmpPltn() {};
    ~TItsAtmpPltn() {};

private:

public:
    String	ATMP_STTN_NMBR; //	N	NUMBER(10)   	N			측정소 번호
    String	ATMP_STTN_NM;   //	N	VARCHAR2(30)	N			측정소 명
    String	ATMP_STTN_ADDR; //	N	VARCHAR2(200)	Y			측정소 주소
    String	ISTL_YY;        //	N	VARCHAR2(4)	    Y			설치 년도
    String	MNGM_INTN_NM;   //	N	VARCHAR2(100)	Y			관리 기관 명
    String	MSRM_SYST_NM;   //	N	VARCHAR2(10)	Y			측정 시스템 명
    String	MSRM_ITEM;      //	N	VARCHAR2(100)	Y			측정 항목
    String	X_CRDN;         //	N	NUMBER(11,8)	Y			X 좌표
    String	Y_CRDN;         //	N	NUMBER(10,8)	Y			Y 좌표

    ATMP_PLTN_RT_PNST   pnst;
protected:

public:
};
//---------------------------------------------------------------------------

/*
*  대기오염특보 클래스
*/
class TItsAtmpSprp
{
public:
    TItsAtmpSprp() {};
    ~TItsAtmpSprp() {};

private:

public:
    String	ATMP_PLTN_KIND; //	N	VARCHAR2(1)	    N			대기 오염 종류(1:미세먼지, 2:초미세먼지)
    String	ANNC_DT;        //	N	VARCHAR2(14)	Y			Update 시간
    String	REGN_CD;        //	N	VARCHAR2(1)	    Y	2		권역 코드(1:북부권, 2:동부권, 3:중부권, 4:남부권) 남양주=동부권
    String	ANNC_YMD;       //	N	VARCHAR2(8)	    Y			발표 일자(4)
    String	ANNC_HH;        //	N	VARCHAR2(2)	    Y			발표 시간(2)
    String	ANNC_GRAD;      //	N	VARCHAR2(1)	    Y			발표 등급(1:주의보, 2:경보, 5:황사경보)
    String	ANNC_DVSN;      //	N	VARCHAR2(1)	    Y			발표 구분(1:발령, 0:해제, 2:발령내역없음)

protected:

public:
};
//---------------------------------------------------------------------------

/*
* VilgFrcs Manager
*/
class TItsVilgFrcsManager
{
public:
    TItsVilgFrcsManager();
    ~TItsVilgFrcsManager();

public:
    TItsMap<String, TItsVilgFrcs*>  FLists;
    TItsMap<String, TItsAtmpPltn*>  FAtmpLists;
    TItsMap<String, TItsAtmpSprp*>  FSprpLists;

public:
    String GetGradeDesc(String &ACode);

    bool LoadFromDb(TADOConnection *ADbConn=NULL);
    bool LoadFromDbAtmp(TADOConnection *ADbConn=NULL);

    bool LoadVilgFrcsInfo(TADOConnection *ADbConn=NULL);
    bool LoadVilgShprInfo(TADOConnection *ADbConn=NULL);
    bool LoadAtmpPltnInfo(TADOConnection *ADbConn=NULL);
    bool LoadAtmpSprpInfo(TADOConnection *ADbConn=NULL);
};
//---------------------------------------------------------------------------
extern TItsVilgFrcsManager *ItsVilgFrcsManager;
//---------------------------------------------------------------------------

#endif

