package cokr.xit.ens.modules.ktsigntalk.gibis.code;

import cokr.xit.ens.modules.common.code.IntgrnDtlStatCd;
import cokr.xit.ens.modules.common.code.IntgrnDtlStatMapperType;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

/**
 * <ul>
 * <li>업무 그룹명: 진행상태코드</li>
 * <li>설 명: </li>
 * <li>작성일: 2021. 11. 23. 오후 5:10:35
 * </ul>
 *
 * @author 박민규
 */
@RequiredArgsConstructor
public enum KtGibisStatusCd implements IntgrnDtlStatMapperType {
    UNKNOWN("알수없음", IntgrnDtlStatCd.UNKNOWN)
    , NULL("입력값 없음", IntgrnDtlStatCd.ACPT_CMPLT)


    , E01("전송 요청 오류", IntgrnDtlStatCd.FAIL)
    , SENT_FAIL("송신실패", IntgrnDtlStatCd.FAIL)
    , SENT("송신", IntgrnDtlStatCd.SENT)
//    , UNIDENTIFIED_USER("비회원", IntgrnDtlStatCd.UNIDENTIFIED_USER)
//    , FORBIDDEN("수신거부", IntgrnDtlStatCd.FORBIDDEN)
//    , INVALID_VALUE("파라미터 오류", IntgrnDtlStatCd.INVALID_VALUE)
//    , INTERNAL_ERROR("카카오페이 서버 오류", IntgrnDtlStatCd.INTERNAL_ERROR)
//    , INVALID_REQUEST("유효하지 않은 요청", IntgrnDtlStatCd.INVALID_REQUEST)
//    , SENT_FAIL("송신실패", IntgrnDtlStatCd.FAIL)


    , E40("수신성공", IntgrnDtlStatCd.RECEIVED)
    , E41("메시지 내용 스팸", IntgrnDtlStatCd.INVALID_REQUEST)
    , E42("착신자 스팸", IntgrnDtlStatCd.FORBIDDEN_USER)
    , E43("레포트 수신 시간 만료", IntgrnDtlStatCd.FAIL)
    , E47("비가입자, 결번, 서비스정지", IntgrnDtlStatCd.UNIDENTIFIED_USER)
    , E48("단말기 전원 꺼짐", IntgrnDtlStatCd.FAIL)
    , E49("기타", IntgrnDtlStatCd.FAIL)
    , E4A("UNKNOWN/단말기형식오류(스팸설정)", IntgrnDtlStatCd.FAIL)
    , E4D("전송 실패(무선망), 단말기 일시정지", IntgrnDtlStatCd.INTERNAL_ERROR)
    , E4J("비가용폰 오류", IntgrnDtlStatCd.FAIL)
    , E4N("수신거부", IntgrnDtlStatCd.FORBIDDEN)
    , E4O("LMS발송오류(시간초과)", IntgrnDtlStatCd.INTERNAL_ERROR)
    , E4P("LMS발송오류(기타)", IntgrnDtlStatCd.INTERNAL_ERROR)
    , E4T("가입자미존재(미동의포함)", IntgrnDtlStatCd.UNIDENTIFIED_USER)
    , E4R("다회선 제외", IntgrnDtlStatCd.FAIL)
    , E4V("수신등록 휴대폰번호 미존재", IntgrnDtlStatCd.UNIDENTIFIED_USER)
    , E4W("기동의 사전문자 제외", IntgrnDtlStatCd.FORBIDDEN_USER)
//    , E4Q("수신대기", IntgrnDtlStatCd.RECEIVED)
//    , E50("수신확인", IntgrnDtlStatCd.READ)
//    , E51("수신미확인", IntgrnDtlStatCd.EXPIRED)
    , E60("열람확인(MMS발송결과순번=2, 열람타임스탬프가 있는 경우)", IntgrnDtlStatCd.READ)
    ;


    @Getter
    private final String codeNm;
    @Getter
    private final IntgrnDtlStatCd intgrnDtlStatCd;

    @Override
    public String getCode() {
        return this.name();
    }


    public static KtGibisStatusCd valueOfEnum(String statCd) {
        if (statCd == null)
            return KtGibisStatusCd.UNKNOWN;

        KtGibisStatusCd docBoxStatusCd = null;
        try {
            docBoxStatusCd = KtGibisStatusCd.valueOf(statCd);
        } catch (IllegalArgumentException e) {
            docBoxStatusCd = KtGibisStatusCd.UNKNOWN;
        }
        return docBoxStatusCd;
    }


    public static KtGibisStatusCd getEnum(String value) {
        for(KtGibisStatusCd v : values())
            if(v.getCode().equalsIgnoreCase(value)) return v;
        throw new IllegalArgumentException();
    }
}
