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

#ifndef VmsDataTypeFH
#define VmsDataTypeFH
//---------------------------------------------------------------------------

#include "VitzroCommF.h"

#define VMS_MAX_RETRY_COUNT             3           /* 3 EA */
#define VMS_DOWNLOAD_TIMEOUT            30          /* 30 sec */
#define VMS_PROVIDE_TIMEOUT             30          /* 30 sec */
#define VMS_BASE_DEFAULT_ID             8000        /* 기본 시나리오 ID */
#define VMS_BASE_MANUAL_ID              9000        /* 수동 시나리오 ID */

// 제공유형
typedef enum en_provide_type
{
	provide_event = 1,                  /* 1:정보가공 완료 */
	provide_mode,                       /* 2:운영모드 변경 */
} EN_PROVIDE_TYPE;

typedef enum en_object_id
{
    OBJ_None                = 0,    /* None */
	OBJ_RealTimeDisplay     = 1,    /* 실시간정보표출 */
	OBJ_ScheduledDisplay    = 2,    /* 계획된정보표출 */
	OBJ_DownloadGraphicData = 3,    /* 그래픽데이터 다운로드 */
	OBJ_StatusControl       = 4,    /* 상태제어 */
	OBJ_StatusSetting       = 5,    /* 상태설정 */
	OBJ_GeneralStatus       = 6,    /* 기본상태정보 */
	OBJ_PowerStatus         = 7,    /* 전원상태정보 */
	OBJ_ModuleStatus        = 8,    /* 모듈상태정보 */
	OBJ_DotStatus           = 9,    /* 도트상태정보 */
	OBJ_ScreenStatus        = 10,   /* 표출상태정보 */
	OBJ_DisplayingData      = 11,   /* 표출정보 */
	OBJ_RealtimeFtpDisplay  = 12,   /* 표출정보 */
} EN_OBJECT_ID;

typedef enum en_status_control
{
	CTL_MODULE_POWER_ON = 1,
	CTL_MODULE_POWER_OFF,
	CTL_LUMINANCE_SET,
	CTL_CONTROLLER_RESET,
    CTL_SCREENSTATUS_REQ,
    CTL_REALTIMEDISPLAY_REQ,
} EN_STATUS_CONTROL;

// 제어유형
typedef enum en_control_type
{
	CTL_TYPE_PARA_SET = 1,      /* 1:환경설정정보 전송 */

	CTL_TYPE_POWER_ON = 11,		/* 11:전원 On */
	CTL_TYPE_POWER_OFF = 12,	/* 12:전원 Off */
	CTL_TYPE_HEATER_ON = 21,	/* 21:히터 On */
	CTL_TYPE_HEATER_OFF = 22,	/* 22:히터 Off */
	CTL_TYPE_FAN_ON = 31,		/* 31:팬 On */
	CTL_TYPE_FAN_OFF = 32,		/* 32:팬 Off */
	CTL_TYPE_MODULE_ON = 41,	/* 41:전광판 On */
	CTL_TYPE_MODULE_OFF = 42,	/* 42:전광판 Off */
	CTL_TYPE_RESET = 61,		/* 61:제어기리셋 */
    CTL_TYPE_LUMINANCE = 71,    /* 71:휘도제어 */
} EN_CONTROL_TYPE;

// 제어결과
typedef enum en_control_ressult
{
	CTL_RESULT_SUCC,			/* 0:성공 */
	CTL_RESULT_FAIL				/* 1:실패 */
} EN_CONTROL_RESULT;

// 스레드 자체 요청 메시지
typedef struct local_command
{
    BYTE  OpCode;
	int   obj;                		/* EN_OBJECT_ID */
	DWORD DataPacketNumber;         /* DataPacket Number */
	int   Idx;                      /* index */

	bool GeneralStatus;				/* 기본상태정보 */
	bool PowerStatus;               /* 전원상태정보 */
	bool ModuleStatus;              /* 모듈상태정보 */
    bool DotStatus;
    bool ScreenStatus;
    bool DisplayingData;

    bool ScreenDataStatusMessage;
    bool RealTimeDisplayMessage;
} LOCAL_COMMAND;

/* 설정 정보 */
typedef struct vms_control_info
{
    BYTE  OpCode;
	int   obj;                		/* EN_OBJECT_ID */
	DWORD DataPacketNumber;         /* DataPacket Number */
	int   Idx;                      /* index */

    BYTE CmdTime[INT_VMS_MAX_DATETIME];         /* 명령수행시각 */
	BYTE VmsId[INT_VMS_MAX_ID+1];		        /* VMS ID */
    BYTE OperId[INT_VMS_MAX_OPER_ID+1];	        /* 제어운영자ID */
    BYTE Result;					            /* 제어결과 */

	union
    {
		struct
        {
			int SchMsgTime;                     /* 계획된 메시지 동작시간 */
			int ModuleTemp;                     /* 모듈전원 OFF 온도 */
			int FanTemp;                        /* Fan동작 기준온도 */
			int HeaterTemp;                     /* Heater동작 기준온도 */
			int ModuleFail;                     /* 모듈장애 판단율 */
			int RetryCount;                     /* 재시도 횟수 */
			int TimeOut;                        /* 최대응답대기시간 */
		} Para;
	} Data;
} VMS_CONTROL_INFO;

typedef struct
{
	int     obj;                	/* EN_OBJECT_ID */
	DWORD   DataPacketNumber;       /* DataPacket Number */
	int     Idx;                    /* index */
} VMS_SERVER_CTL_INFO;


/* 저장 정보 */
typedef enum en_save_type
{
	save_provide = 1,                   /* 1:제공정보 */
	save_download                       /* 2:다운로드정보 */
} EN_SAVE_TYPE;

typedef struct save_struct
{
	BYTE    Type;                          /* 저장유형 */
	BYTE    Count;                         /* 정보 갯수 */
	void   *pObj[INT_MAX_VMS_STATE];
} SAVE_STRUCT;

/* 제공 정보 */
typedef struct provide_struct
{
	BYTE Type;                          /* 제공유형 */
    BYTE Count;                                 /* 대상 VMS 개수 */
    INT_VMS_MODE Unit[INT_MAX_VMS_MODE];
} PROVIDE_STRUCT;

#define ALL_VMS_ID                		"ALL"   /* 전체 VMS */


// VMS 폼 스케줄종류
typedef enum enFormScheduleType
{
    enFormTraffic = 0,
    enFormDolbal,
    enFormGongsa,
    enFormHongbo,
    enFormDeture,
    enFormFixed,
    enFormBase,
    enFormCongest,
} EN_FORM_SCHEDULE_TYPE;

// VMS 폼 유형
typedef enum enFormKind
{
    enFormKindTrfRow1 = 11,     // 소통상황(1단)
    enFormKindTrfRow2 = 12,     // 소통상황(2단)
    enFormKindTrfRow3 = 13,     // 소통상황(3단)
    enFormKindTrfRow4 = 14,     // 소통상황(4단)
    enFormKindTrfImg  = 15,     // 소통상황(도형식배경소통정보)
    enFormKindCongest = 16,     // 정체소통상황
    enFormKindDolbal  = 20,     // 돌발문안
    enFormKindGongsa  = 30,     // 공사/행사문안
    enFormKindHongbo  = 40,     // 홍보문안
    enFormKindDetour  = 50,     // 우회도로
} EN_FORM_KIND;

// VMS 객체종류
typedef enum en_object_data
{
	text_object_data,		/* 0:문자열 */
	graphic_object_data,	/* 1:이미지 */
	graphicID_object_data,  /* 2:이미지ID */
} EN_OBJECT_DATA;

// VMS 제공정보 객체 코드
typedef enum en_vms_object_type
{
	vms_obj_none,       /* 0:정보없음 */
	vms_obj_text,       /* 1:문자열 */
	vms_obj_bitmap,     /* 2:Bitmap ID */
	vms_obj_draw,       /* 3:Draw */
} EN_VMS_OBJECT_TYPE;

// 소통등급(혼잡도코드)
typedef enum en_traffic_grade
{
	grade_none,             /* 0:정보없음 */
	grade_smoothness,       /* 1:원활 */
	grade_delay,            /* 2:지체 */
	grade_congestion,       /* 3:정체 */
} EN_TRAFFIC_GRADE;

// VMS 컬러
typedef enum en_color_code
{
	color_black,    /* 0:검정색 */
	color_red,      /* 1:적색 */
	color_green,    /* 2:녹색 */
	color_amber,    /* 3:황색 */
} EN_COLOR_CODE;

// VMS 객체 폰트
typedef enum en_font_code
{
	/* 0:굴림 */
	font_malgun = 1,					/* 1:고딕체 */
	font_hygmj,							/* 2:HY견명조 */
	font_gulim,							/* 3:굴림체 */
	font_gungsuh,						/* 4:궁서체 */
	font_dotum,							/* 5:돋움체 */
	font_batang							/* 6:바탕체 */
} EN_FONT_CODE;

// 폰트굵기
typedef enum en_font_thickness
{
	font_thickness_normal,				/* 0:보통 */
	font_thickness_bold,				/* 1:굵게 */
} EN_FONT_THICKNESS;

// 문자열정열방식
typedef enum en_text_align
{
	text_align_left,  					/* 0:LEFT */
	text_align_right,  					/* 1:RIGHT */
	text_align_center,  				/* 2:CENTER */
} EN_TEXT_ALIGN;

/*
*  VMS ASN.1 Code convert functions
*/
int GradeToColorCode(int AGrade);
TColor GradeToFillColor(int AGrade);
AnsiString GradeToString(int AGrade, int AType);

TColor CodeToColor(int ACode);
AnsiString CodeToFont(int ACode);


AnsiString GetFtpImageId(AnsiString AImgNmbr);

#endif
