package com.caliverse.admin.global.common.code;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public enum ErrorCode {
    SUCCESS("성공"),

    //------------------------------------------------------------------------------------------------------------------------------
    // json
    //------------------------------------------------------------------------------------------------------------------------------
    USER_GAME_LOGIN_JSON_MAPPER_PARSE_ERROR("유저 게임세션 데이터 파싱하는 도중 에러가 발생했습니다."),


    WRONG_TYPE_TOKEN("잘못된 타입의 토큰입니다."),
    EXPIRED_TOKEN("만료된 토큰입니다."),
    PWD_EXPIRATION("비밀번호 기간 만료"),
    UNSUPPORTED_TOKEN("지원하지않는 토큰입니다."),
    WRONG_TOKEN( "잘못된 토큰입니다."),
    DOFILTER_ERROR( "doFilterInternal() 오류"),
    AUTHENTICATION_FAILED("인증에 실패했습니다."),
    BAD_REQUEST("잘못된 요청입니다."),
    SIGNATURE_ERROR("잘못된 서명의 토큰입니다."),

    INACTIVE_USER("User is inactive"),

    PASSWORD_INCLUDE("기존 사용 이력이 있는 비밀번호는 재사용할 수 없습니다."),
    PASSWORD_ERROR("입력된 현재 비밀번호가 틀립니다."),

    NOT_FOUNT_TEAM("입력한 팀을 찾지 못했습니다."),
    NOT_FOUNT_API("요청한 API를 찾지 못했습니다."),
    NOT_FOUNT_POSITION( "입력한 직급을 찾지 못했습니다."),
    NOT_MATCH_USER("이메일 또는 비밀번호가 일치하지않습니다."),
    DUPLICATED_EMAIL("동일한 이메일이 존재합니다."),
    NOT_PERMITTED("로그인 권한이 없습니다. 계정 관련 관리자에게 문의하세요."),
    NOT_FOUND_USER("ID또는 비밀번호가 일치하지 않습니다."),
    DUPLICATED_GROUPNAME("동일한 관리자 그룹명이 존재합니다."),

    //meta data
    NOT_ITEM("존재하지 않는 아이템코드입니다."),

    //excel upload
    ERROR_EXCEL_UPLOAD("엑셀 업로드중 오류 발생하였습니다."),
    ERROR_EXCEL_DOWN("엑셀 다운로드중 오류 발생하였습니다."),
    NOT_EXIT_EXCEL("Excel 파일을 선택해주세요."),
    DUPLICATE_EXCEL("중복된 유저 정보가 있습니다."),
    USERTYPE_CHECK_EXCEL("타입을 확인해주세요."),

    ERROR_API_CALL("API 호출에 실패하였습니다."),

    ERROR_HISTORY_SAVE("히스토리로그 저장 실패"),

    //calium
    ERROR_CALIUM_FINISH("충전 완료된 칼리움입니다."),

    //mail
    ERROR_MAIL_ITEM_CALIUM_OVER("첨부 가능한 칼리움을 초과하였습니다."),

    //Land
    ERROR_LAND_AUCTION_IMPOSSIBLE("경매를 진행할 수 없는 랜드입니다."),
    ERROR_AUCTION_STATUS_IMPOSSIBLE("수정할 수 없는 경매상태입니다."),
    ERROR_AUCTION_LAND_OWNER("해당 랜드는 소유자가 존재하여 경매를 진행할 수 없습니다."),
    ERROR_LAND_OWNER_CHANGES_RESERVATION("소유권 변경 예약을 취소할 수 없는 상태입니다."),
    ERROR_LAND_OWNER_CHANGES_DUPLICATION("등록된 소유권 변경 존재합니다."),
    ERROR_LAND_OWNER_DUPLICATION("해당 랜드는 소유자가 존재합니다."),

    //Battle
    ERROR_BATTLE_EVENT_TIME_OVER("해당 시간에 속하는 이벤트가 존재합니다."),
    ERROR_BATTLE_EVENT_STATUS_IMPOSSIBLE("수정할 수 없는 이벤트상태입니다."),
    ERROR_BATTLE_EVENT_STATUS_START_IMPOSSIBLE("진행중인 이벤트상태입니다."),

    //mongoDB
    ERROR_LOG_MEMORY_LIMIT("데이터가 많아 메모리 초과"),
    ERROR_MONGODB_QUERY("디비 조회 에러"),

    //Initialize
    ERROR_DATA_INIT("데이터 초기화 에러 발생"),

    //------------------------------------------------------------------------------------------------------------------------------
    // DyanamoDB
    //------------------------------------------------------------------------------------------------------------------------------
    GUID_CHECK("Guid를 확인해주세요."),
    EMAIL_CHECK("Email을 확인해주세요"),
    GUID_LENGTH_CHECK("guid(32자)를 확인해주세요."),
    NICKNAME_CHECK("gameDB에 닉네임이 없습니다."),
    DYNAMODB_CONNECTION_ERROR("dynamoDB_connection_error"),
    DYNAMODB_CONDITION_CHECK_ERROR("dynamoDB_Conditional_Check_error"),
    DYNAMODB_PROCESS_ERROR("dynamoDB 처리 중 에러발생"),
    DYNAMODB_INSERT_ERROR("dynamoDB_Insert_error"),
    DYNAMODB_UPDATE_ERROR("dynamoDB_Update_error"),
    DYNAMODB_DELETE_ERROR("dynamoDB_Delete_error"),
    DYNAMODB_EXIT_ERROR("dynamodb_exit_error"),
    DYNAMODB_ITEM_DELETE_FAIL("아이템 삭제에 실패하였습니다."),
    DYNAMODB_CONVERT_ERROR("형변환 도중 에러가 발생하였습니다."),
    DYNAMODB_JSON_PARSE_ERROR("dynamoDB Json 변환 중 에러 발생"),


    ADMINDB_EXIT_ERROR("admindb_exit_error"),

    NICKNAME_EXIT_ERROR("변경 닉네임이 존재합니다. 다시 시도해주세요."),
    NICKNAME_NUMBER_ERROR("닉네임은 첫번째 글자에 숫자를 허용하지 않습니다. 다시 시도해주세요."),
    NICKNAME_SPECIALCHAR_ERROR("닉네임은 특수문자를 사용할 수 없습니다. 다시 시도해주세요."),
    NICKNAME_LANGTH_ERROR("닉네임은 최소 2글자에서 최대 12글자까지 허용 합니다. 다시 시도해주세요."),


    SENDMAIL_ERROR("메일 발송중 오류가 발생하였습니다. 관리자에게 문의주세요."),

    EXCEPTION_INVALID_PROTOCOL_BUFFER_EXCEPTION_ERROR("InvalidProtocolBufferException"),
    EXCEPTION_IO_EXCEPTION_ERROR("IOException"),
    EXCEPTION_INTERRUMPTED_EXCEPTION_ERROR("InterruptedException"),
    ;

    private final String message;
}
