package com.gcsc.connection.common.exception;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public enum ErrorCode {

    INVALID_CREDENTIALS(401, "AUTH001", "아이디 또는 비밀번호가 올바르지 않습니다"),
    TOKEN_EXPIRED(401, "AUTH002", "토큰이 만료되었습니다"),
    TOKEN_INVALID(401, "AUTH003", "유효하지 않은 토큰입니다"),
    ACCESS_DENIED(403, "AUTH004", "접근 권한이 없습니다"),
    USER_NOT_FOUND(404, "USER001", "사용자를 찾을 수 없습니다"),
    USER_DISABLED(403, "USER002", "비활성화된 사용자입니다"),
    USER_LOGIN_ID_DUPLICATE(409, "USER003", "이미 존재하는 로그인 ID입니다"),
    TENANT_NOT_FOUND(404, "TENANT001", "테넌트를 찾을 수 없습니다"),
    TENANT_CODE_DUPLICATE(409, "TENANT002", "이미 존재하는 테넌트 코드입니다"),
    SERVICE_NOT_FOUND(404, "SVC001", "서비스를 찾을 수 없습니다"),
    SERVICE_CODE_DUPLICATE(409, "SVC002", "이미 존재하는 서비스 코드입니다"),
    SERVICE_API_NOT_FOUND(404, "SVC003", "서비스 API를 찾을 수 없습니다"),
    HEALTH_CHECK_FAILED(500, "HC001", "헬스체크 실행에 실패했습니다"),
    API_KEY_NOT_FOUND(404, "KEY001", "API Key를 찾을 수 없습니다"),
    API_KEY_ALREADY_REVOKED(409, "KEY002", "이미 폐기된 API Key입니다"),
    API_KEY_REQUEST_NOT_FOUND(404, "KEY003", "API Key 신청을 찾을 수 없습니다"),
    API_KEY_REQUEST_ALREADY_PROCESSED(409, "KEY004", "이미 처리된 신청입니다"),
    ENCRYPTION_ERROR(500, "KEY005", "암호화 처리 중 오류가 발생했습니다"),
    GATEWAY_API_KEY_MISSING(401, "GW001", "API Key가 필요합니다"),
    GATEWAY_API_KEY_INVALID(401, "GW002", "유효하지 않은 API Key입니다"),
    GATEWAY_API_KEY_EXPIRED(403, "GW003", "만료된 API Key입니다"),
    GATEWAY_SERVICE_INACTIVE(503, "GW004", "비활성 서비스입니다"),
    GATEWAY_PERMISSION_DENIED(403, "GW005", "해당 API에 대한 권한이 없습니다"),
    GATEWAY_PROXY_FAILED(502, "GW006", "서비스 요청에 실패했습니다"),
    GATEWAY_DAILY_LIMIT_EXCEEDED(429, "GW007", "일일 최대 호출 건수 제한으로 사용할 수 없습니다"),
    INTERNAL_ERROR(500, "SYS001", "시스템 오류가 발생했습니다");

    private final int status;
    private final String code;
    private final String message;
}
