package cokr.xit.ens.modules.common.code;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

import java.util.ArrayList;
import java.util.List;

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


    , REG("등록")
    , MAKING("제작")

    , ACPT_OK("접수요청성공")
    , ACPT_FAIL("접수실패")
    , ACPT_CMPLT("접수완료")


    , UNIDENTIFIED_USER("비회원")
    , FORBIDDEN("수신거부")
    , INVALID_VALUE("파라미터 오류")
//    , INTERNAL_ERROR("카카오페이 서버 오류")
    , INTERNAL_ERROR("API 서버 내부 오류")
    , INVALID_REQUEST("유효하지 않은 요청")
    , FORBIDDEN_USER("허용되지 않은 사용자")

    , FAIL("전송실패")
    , SENT("송신")
    , RECEIVED("수신")
    , READ("열람")
    , EXPIRED("만료")
    ;


    @Getter
    private final String codeNm;

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


    @Override
    public IntgrnDtlStatCd getIntgrnDtlStatCd() {
        return this;
    }


    public boolean isSuccess() {
        switch (this) {
            case SENT:
            case RECEIVED:
            case READ:
            case EXPIRED:
                return true;
            default:
                return false;
        }
    }

    public boolean isFail() {
        switch (this) {
            case ACPT_FAIL:
            case UNIDENTIFIED_USER:
            case FORBIDDEN:
            case INVALID_VALUE:
            case INTERNAL_ERROR:
            case INVALID_REQUEST:
            case FORBIDDEN_USER:
            case FAIL:
                return true;
            default:
                return false;
        }
    }

    public static List<IntgrnDtlStatCd> getFails() {
        List<IntgrnDtlStatCd> list = new ArrayList<>();
        for (IntgrnDtlStatCd value : IntgrnDtlStatCd.values()) {
            if (value.isFail())
                list.add(value);
        }
        return list;
    }
}
