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

#ifndef VmsUtilsFH
#define VmsUtilsFH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <stdio.h>
#include <ADODB.hpp>
#include <DB.hpp>
#include <SyncObjs.hpp>
#include <ExtCtrls.hpp>
#include <jpeg.hpp>
#include <GIFimg.hpp>
//---------------------------------------------------------------------------
#include "CenterCommF.h"
//---------------------------------------------------------------------------

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

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

typedef enum en_object_id
{
	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_control_ressult
{
	CTL_RESULT_SUCC,			/* 0:성공 */
	CTL_RESULT_FAIL				/* 1:실패 */
} EN_CONTROL_RESULT;

/* 설정 정보 */
typedef struct vms_control_info
{
	BYTE CtlType;                               /* 제어유형 */
	BYTE VmsId[INT_VMS_MAX_ID+1];		        /* VMS ID */
    BYTE CmdTime[INT_VMS_MAX_DATETIME];         /* 명령수행시각 */
    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_VMS_MAX_STATE];
} SAVE_STRUCT;

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

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

// 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,     // 우회도로
    enFormKindSafe    = 60,     // 재난안전
    enFormKindVideo   = 70,     // 동영상
    enFormKindStream  = 80,     // 스트리밍영상
} 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;

// 소통등급(혼잡도코드)
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;

bool AssignBmp(TImage *AImage, TStream *AStream);
bool AssignGif(TImage *AImage, TStream *AStream);
bool AssignJpg(TImage *AImage, TStream *AStream);

bool SaveToFileBmp(TImage *AImage, AnsiString AFileName);
bool SaveToFileGif(TImage *AImage, AnsiString AFileName);
bool SaveToFileJpg(TImage *AImage, AnsiString AFileName);

bool SaveToStreamGif(TImage *AImage, TStream *AStream);
bool SaveToStreamJpg(TImage *AImage, TStream *AStream);
bool SaveToStreamJpg(Graphics::TBitmap *ABitmap, TStream *AStream);

int GradeToColorCode(int AGrade);
TColor GradeToFillColor(int AGrade);
AnsiString GradeToString(String AFormType, int AGrade, int AType);

TColor CodeToFormColor(int ACode);
TColor CodeToBackColor(int ACode);
TColor CodeToFontColor(int ACode);
AnsiString CodeToFontName(int ACode);
//---------------------------------------------------------------------------
#endif
