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

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

public enum eVmsFormDisplayType {

    DISPLAY_SHIFT_UP            (0x01, "0x01.from_display_shift_up"),           // 기존 화면 위에 다음 화면을 겹쳐서 위 방향으로 다음 화면만 밀면서 표출
    DISPLAY_SHIFT_DOWN          (0x02, "0x02.from_display_shift_down"),         // 기존 화면 위에 다음 화면을 겹쳐서 아래 방향으로 다음 화면만 밀면서 표출
    DISPLAY_SHIFT_LEFT          (0x03, "0x03.from_display_shift_left"),         // 기존 화면 위에 다음 화면을 겹쳐서 왼쪽 방향으로 다음 화면만 밀면서 표출
    DISPLAY_SHIFT_RIGHT         (0x04, "0x04.from_display_shift_right"),        // 기존 화면 위에 다음 화면을 겹쳐서 오른쪽 방향으로 다음 화면만 밀면서 표출
    DISPLAY_SCROLL_UP           (0x05, "0x05.from_display_scroll_up"),          // 기존 화면과 다음 화면을 위 방향으로 밀면서 표출
    DISPLAY_SCROLL_DOWN         (0x06, "0x06.from_display_scroll_down"),        // 기존 화면과 다음 화면을 아래 방향으로 밀면서 표출
    DISPLAY_SCROLL_LEFT         (0x07, "0x07.from_display_scroll_left"),        // 기존 화면과 다음 화면을 왼쪽 방향으로 밀면서 표출
    DISPLAY_SCROLL_RIGHT        (0x08, "0x08.from_display_scroll_right"),       // 기존 화면과 다음 화면을 오른쪽 방향으로 밀면서 표출
    DISPLAY_WIPDISPLAY_UP       (0x09, "0x09.from_display_wipdisplay_up"),      // 기존 화면을 위 방향으로 지우면서 다음 화면을 표출
    DISPLAY_WIPDISPLAY_DOWN     (0x0A, "0x0A.from_display_wipdisplay_down"),    // 기존 화면을 아래 방향으로 지우면서 다음 화면을 표출
    DISPLAY_WIPDISPLAY_LEFT     (0x0B, "0x0B.from_display_wipdisplay_left"),    // 기존 화면을 왼쪽 방향으로 지우면서 다음 화면을 표출
    DISPLAY_WIPDISPLAY_RIGHT    (0x0C, "0x0C.from_display_wipdisplay_right"),   // 기존 화면을 오른쪽 방향으로 지우면서 다음 화면을 표출
    DISPLAY_CURTAIN_V_IN        (0x0D, "0x0D.from_display_curtain_v_in"),       // 수직으로 나누어 중앙을 향해 안쪽으로 표출
    DISPLAY_CURTAIN_V_OUT       (0x0E, "0x0E.from_display_curtain_v_out"),      // 수직으로 나누어 중앙에서 바깥쪽을 향해 표출
    DISPLAY_URTAIN_H_IN         (0x0F, "0x0F.from_display_urtain_h_in"),        // 수평으로 나누어 중앙을 향해 안쪽으로 표출
    DISPLAY_CURTAIN_H_OUT       (0x10, "0x10.from_display_curtain_h_out"),      // 수평으로 나누어 중앙에서 바깥쪽을 향해 표출
    DISPLAY_TRACDISPLAY_RIGHT   (0x11, "0x11.from_display_tracdisplay_right"),  // 한 글자 크기에 대한 한 Line씩 오른쪽으로 표출
    DISPLAY_TRACDISPLAY_LEFT    (0x12, "0x12.from_display_tracdisplay_left"),   // 한 글자 크기에 대한 한 Line씩 왼쪽으로 표출
    DISPLAY_BLIND_UP            (0x13, "0x13.from_display_blind_up"),           // 다음 화면을 수직 또는 몇 개의 화면으로 분할하여 위 방향으로 표출
    DISPLAY_BLIND_DOWN          (0x14, "0x14.from_display_blind_down"),         // 다음 화면을 수직 또는 몇 개의 화면으로 분할하여 아래 방향으로 표출
    DISPLAY_BLIND_LEFT          (0x15, "0x15.from_display_blind_left"),         // 다음 화면을 수직 또는 몇 개의 화면으로 분할하여 왼쪽 방향으로 표출
    DISPLAY_BLIND_RIGHT         (0x16, "0x16.from_display_blind_right"),        // 다음 화면을 수직 또는 몇 개의 화면으로 분할하여 오른쪽 방향으로 표출
    DISPLAY_BLINKING            (0x17, "0x17.from_display_blinking");           // 표출화면(폼 전체 깜박임

    private final int value;
    private final String string;

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

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

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

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

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