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

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


/*
* Sub Info Class
*/
class TPrcsParamClct
{
public:
    TPrcsParamClct() {};
    virtual ~TPrcsParamClct() {};

public:
    String     CLCT_SYST_CD;    //	N	VARCHAR2(7)	N			수집 시스템 코드
    int        FUSN_PRRT;       //	N	NUMBER(2)	Y	0		퓨전 우선순위
    float      FUSN_WGHT;       //	N	NUMBER(5,2)	Y	0		퓨전 가중치
};
//---------------------------------------------------------------------------

/*
* Info Class
*/
class TPrcsParam
{
public:
    TPrcsParam();
    virtual ~TPrcsParam();
    void Clear();

public:
    String     PARA_ID;
    String     PARA_NM;

    String     FLTR_MTHD_CD;    //	N	VARCHAR2(7)	Y			필터링 방법 코드
    String     FUSN_MTHD_CD;    //	N	VARCHAR2(7)	Y			퓨전 방법 코드
    String     ADJS_MTHD_CD;    //	N	VARCHAR2(7)	Y			보정 방법 코드
    String     SMTH_MTHD_CD;    //	N	VARCHAR2(7)	Y			평활화 방법 코드

    int        FLTR_MIN_TFVL;               //	N	NUMBER(6)	Y	0		필터링 최소 교통량
    int        FLTR_MAX_TFVL;               //	N	NUMBER(6)	Y	0		필터링 최대 교통량
    int        FLTR_LWST_SPED;              //	N	NUMBER(3)	Y	0		필터링 최저 속도
    int        FLTR_HGHS_SPED;              //	N	NUMBER(3)	Y	0		필터링 최고 속도
    float      ADJS_WGHT_AVRG_PRE_1CYCL;    //	N	NUMBER(5,2)	Y	0		보정 가중치 평균 이전 1주기
    float      ADJS_WGHT_AVRG_PRE_2CYCL;    //	N	NUMBER(5,2)	Y	0		보정 가중치 평균 이전 2주기
    float      ADJS_WGHT_AVRG_PRE_3CYCL;    //	N	NUMBER(5,2)	Y	0		보정 가중치 평균 이전 3주기
    String     ADJS_15M_PTRN_APLY_YN;       //	N	CHAR(1)	    Y	'N'		보정 15분 패턴 적용 여부
    int        ADJS_SHTR_MISS_DECS_CYCL;    //	N	NUMBER(2)	Y			보정 단기 결측 판단 주기
    float      SMTH_LWST_SPED_FCTR;         //	N	NUMBER(3,2)	Y	0		평활화 최저 속도 계수
    float      SMTH_HGHS_SPED_FCTR;         //	N	NUMBER(3,2)	Y	0		평활화 최고 속도 계수
    float      SMTH_WGHT_AVRG_PRST;         //	N	NUMBER(5,2)	Y	0		평활화 가중치 평균 현재
    float      SMTH_WGHT_AVRG_PRE_1CYCL;    //	N	NUMBER(5,2)	Y	0		평활화 가중치 평균 이전 1주기
    float      SMTH_WGHT_AVRG_PRE_2CYCL;    //	N	NUMBER(5,2)	Y	0		평활화 가중치 평균 이전 2주기

    TItsMap<int, TPrcsParamClct*>    CLCTS;  //우선순위순서로 소팅되서 들어감

    String     DEL_YN;
    String     ToString();
};
//---------------------------------------------------------------------------

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

public:
    TItsMap<String, TPrcsParam*> FLists;

public:
    void Clear();
    bool LoadFromDb(TADOConnection *ADbConn=NULL);
    bool LoadParam(TADOConnection *ADbConn=NULL);
    bool LoadParamDetl(TADOConnection *ADbConn=NULL);
    bool GetNewPrcsParamId(String &ANewPraramId, TADOConnection *ADbConn=NULL);
    bool IsUsing(String AParamId, TADOConnection *ADbConn=NULL);
    bool DeleteData(TPrcsParam* AObj, TADOConnection *ADbConn=NULL);

};
//---------------------------------------------------------------------------
extern TPrcsParamManager *PrcsParamManager;
//---------------------------------------------------------------------------
#endif
