package cokr.xit.ens.core.exception.code;

import cokr.xit.ens.core.code.CodeMapperType;

/**
 * <ul>
 * <li>업무 그룹명: 내부 오류 코드</li>
 * <li>설 명: </li>
 * <li>작성일: 2021. 8. 4. 오후 3:51:43
 * </ul>
 *
 * @author 박민규
 */
public enum EnsErrCd implements CodeMapperType {

	OK("정상"),
	UNKNOWN("알수없음"),

	NO_REQUIRED_PARAM("필수 파라미터가 없습니다."),
	INVALID_REQUEST("유효하지 않은 요청데이터 입니다."),
	INVALID_REQUEST_URL("유효하지 않은 요청 URL 입니다."),
	NOT_FOUND_BEAN("빈(bean)을 찾을 수 없습니다."),
	NO_DATA_FOUND("자료를 찾을 수 없습니다."),
	INVALID_DATA("유효하지 않은 데이터 입니다."),
	API_COMM_ERROR("API 통신 오류가 발생 했습니다."),
	INVALID_RESPONSE("유효하지 않은 응답 입니다."),
	INVALID_RES_CODE("유효하지 않은 응답코드 입니다."),
	INVALID_RES_DATA("유효하지 않은 응답데이터 입니다."),
	RESPONSED_FAILURE_CODE("실패코드가 응답 되었습니다."),
	FAILED_CREATE_RESPONSE_DATA("응답데이터 생성 실패"),
	URL_ALREADY_CREATED("URL이 이미 생성 되었습니다."),
	PAYMENT_ALREADY_CMPLTED("결제가 완료된 자료 입니다."),
	SERVICE_NOT_SUPPORTED("지원하지 않는 서비스 입니다."),


	ERR401("필수 파라미터가 없습니다."),
	ERR402("파라미터 유효성 검증 오류"),
	ERR403("잘못된 파라미터 입니다."),
	ERR404("일치하는 자료가 없습니다."),
	ERR405("잘못된 요청 값."),
	ERR410("필수값 없음"),
	ERR411("잘못된 JSON 포맷 문자열"),
	ERR500("서버 오류"),
	ERR501("HttpServer 오류"),
	ERR502("HttpClient 오류"),
	ERR503("RestClient 오류"),
	ERR504("요청 데이터 Json 파싱 오류"),
	ERR505("응답 데이터 Json 파싱 오류"),
	ERR506("Hash 생성 오류"),
	ERR507("유효하지 않은 데이터"),
	ERR511("JSON 형식으로 변환 실패"),
	ERR512("JSON Parsing Fail"),
	ERR513("Services Not Supported"),
	ERR521("방화벽 설정 오류"),
	ERR540("중복된 데이터"),
	ERR600("API 오류"),
	ERR601("API서버 응답 오류"),
	ERR602("API서버 내부 오류"),
	ERR603("유효하지 않은 토큰(OTT) 값"),
	ERR604("API 통신 실패"),
	ERR610("응답 데이터에 필수값이 없음"),
	ERR620("API Response Error"),
	ERR699("API 기타 오류"),
	ERR999("기타 오류"),
	ERR901("권한 없음"),
	ERR902("유효하지 않은 데이터"),
	ERR903("처리 완료된 데이터"),
	ERR904("CI 변환 실패"),



	BILL401("duplicated \"bill_uid\""),
	BILL402("duplicated \"biller_user_key\""),
	BILL403("validation fail"),    
	BILL404("not found data"),
	BILL405("invalid value"),    
	BILL501("json convert fail"),
	BILL511("청구서 URL 생성 병렬처리 중 ERROR"),
	BILL512("청구서 URL 생성 실패"),
	BILL601("json parsing fail"),
	BILL602("http status failure response"),
	BILL603("response data is invalid"),    
	BILL604("client api failure response"),    
	BILL999("unknown error"),


	ACPT402("유효성 검증 실패"),
	ACPT404("일치하는 자료가 없습니다."),
	ACPT405("접수 가능한 자료가 아닙니다."),
	ACPT410("필수값 없음"),
	ACPT411("잘못된 JSON 포맷 문자열"),
	ACPT412("청구서 접수 실패"),
	ACPT500("접수 처리 중 오류"),
	ACPT511("JSON 형식으로 변환 실패"),
	ACPT999("기타 오류"),


	MAKE404("일치하는 자료가 없습니다."),
	MAKE410("필수값 없음"),
	MAKE411("잘못된 JSON 포맷 문자열"),
	MAKE500("제작 처리 중 오류"),
	MAKE511("JSON 형식으로 변환 실패"),
	MAKE512("청구서 제작 실패"),
	MAKE513("CI 제작 실패"),
	MAKE521("데이터 생성 실패"),
	MAKE610("응답 데이터에 필수값이 없음"),
	MAKE620("API Response Error"),
	MAKE630("API Request Error"),


	SEND404("일치하는 자료가 없습니다."),
	SEND405("잘못된 요청 값."),
	SEND410("필수값 없음"),
	SEND411("잘못된 JSON 포맷 문자열"),
	SEND500("전송 처리 중 오류"),
	SEND502("발송메시지 생성 실패"),
	SEND511("JSON 형식으로 변환 실패"),
	SEND601("토큰생성 실패"),
	SEND620("API Response Error"),
	SEND630("API Request Error"),


	RSLT404("일치하는 자료가 없습니다."),
	RSLT405("요청건수와 실제 자료의 건수가 상이 합니다."),
	RSLT406("일부 자료가 결과반영에 실패 했습니다."),
	RSLT407("전체 자료가 결과반영에 실패 했습니다."),
	RSLT410("필수값 없음"),
	RSLT411("잘못된 JSON 포맷 문자열"),
	RSLT500("전송결과 처리 중 오류"),
	RSLT502("요청메시지 생성 실패"),
	RSLT511("JSON 형식으로 변환 실패"),
	RSLT512("제공되지 않는 서비스 입니다."),
	RSLT601("전송결과 조회 실패"),
	RSLT620("API Response Error"),
	RSLT630("API Request Error"),
	RSLT999("기타 오류"),


	PRVD404("일치하는 자료가 없습니다."),
	PRVD410("필수값 없음"),
	PRVD411("잘못된 JSON 포맷 문자열"),
	PRVD500("상태갱신 처리 중 오류"),
	PRVD511("JSON 형식으로 변환 실패"),
	PRVD502("요청메시지 생성 실패"),
	PRVD601("상태 조회 실패"),
	PRVD620("API Response Error"),
	PRVD630("API Request Error"),
	;


	private final String code;     
	private final String codeNm;   

	EnsErrCd(String codeNm) {
		this.code = this.name();
		this.codeNm = codeNm;
	}

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

	@Override
	public String getCodeNm() {
		return this.codeNm;
	}


	public static EnsErrCd valueOfEnum(String code) {
		if (code == null)
			return EnsErrCd.UNKNOWN;

		EnsErrCd ensErrCd = null;
		try {
			ensErrCd = EnsErrCd.valueOf(code);
		} catch (IllegalArgumentException e) {
			ensErrCd = EnsErrCd.UNKNOWN;
		}
		return ensErrCd;
	}
}
