package com.its.vms.xnettcp.vms.protocol.enums;

import java.util.HashMap;
import java.util.Map;

public enum eVmsOpCode {

    OP_VMS_FORM_DATA_DISPLAY            (0x80, "0x80.폼 데이터 표출"),          // 표출할 폼 데이터                           SERVER→VMS
    OP_VMS_DATA_DOWNLOAD                (0x82, "0x82.데이터 다운로드"),         // INI, CFG , Bitmap , Data 파일              SERVER→VMS
    OP_VMS_DATA_UPLOAD                  (0x84, "0x84.데이터 업로드"),           // INI, CFG , Bitmap , Data 파일 업로드 요구, SERVER→VMS
    OP_VMS_STATUS_CONTROL               (0x86, "0x86.VMS 상태제어"),            // VMS 제어정보                               SERVER→VMS
    OP_VMS_STATUS_REQ                   (0x88, "0x88.VMS Status 요구"),         // VMS 상태정보 요구                          SERVER→VMS
    OP_VMS_PARAMETER_REQ                (0x8A, "0x8A.VMS 파라미터 요구"),       // VMS 로컬 상태 요구                         SERVER→VMS
    OP_VMS_POWER_MODULE_STATUS_REQ      (0x8C, "0x8C.전원 모듈 상태 요구"),     // 전원 모듈 상태를 검사 결과를 요청,         SERVER→VMS
    OP_VMS_DISPLAY_MODULE_STATUS_REQ    (0x8E, "0x8E.표출 모듈 상태 요구"),     // 표출 모듈 상태를 검사 결과를 요청,         SERVER→VMS
    OP_VMS_STOP_IMAGE_REQ               (0x90, "0x90.VMS 정지영상 요구"),       // 현재 표출되는 이미지 송신 요구,            SERVER→VMS
    OP_VMS_UPLOAD_CURRENT_DISPLAY_FORM  (0x94, "0x94.현재 표출폼 Upload"),      // Local 에서 표출 중인 폼 Upload 요구,       SERVER→VMS
    OP_VMS_DOWNLOAD_FORM_SCHEDULE       (0x96, "0x96.Download Schedule"),       // 계획된 Form Schedule 을 download,          SERVER→VMS
    OP_VMS_DISPLAY_DEFAULT_FORM         (0x98, "0x98.Display Default Form"),    // 디폴트 Form 표출 요구,                     SERVER→VMS
    OP_VMS_DOWNLOAD_FORM                (0x9A, "0x9A.Download Form"),           // Form download,                             SERVER→VMS
    OP_VMS_UPLOAD_FORM_SCHEDULE         (0x9C, "0x9C.Upload Schedule Form"),    // 스케줄 메시지 업로드 요구,                 SERVER→VMS
    OP_VMS_BLANK                        (0x9E, "0x9E.Blank"),                   // schedule 표출,                             SERVER→VMS
    OP_VMS_DISPLAY_FORM_ID              (0xA0, "0xA0.Display Form ID"),         // 수신, 통신 session 유효 확인 요청,         SERVER←VMS
    OP_VMS_LOCAL_USER_COMMAND           (0xFE, "0xFE.Local User Command");      // 서버 프로그램 내에서 사용할 내부 명령      SERVER←SERVER

    private final int value;
    private final String string;

    private static final Map<Integer, eVmsOpCode> map;
    static {
        map = new HashMap<>();
        for (eVmsOpCode e : values()) {
            map.put(e.value, e);
        }
    }

    public static eVmsOpCode getValue(int value) {
        return map.get(value);
    }
    public static eVmsOpCode getValue(byte value) {
        int intValue = (value & 0xFF);
        return map.get(intValue);
    }

    eVmsOpCode(int value, String string) {
        this.value  = value;
        this.string = string;
    }

    public int getValue() {
        return this.value;
    }

    @Override
    public String toString() {
        return this.string;
    }
}
