package com.devjob.common.exception;

import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;

/**
 * EP10: 4개 서비스(EP06~09)에 흩어져 있던 ErrorCode를 하나로 통합한다.
 * 서비스별로 코드가 겹칠 일은 거의 없지만, 겹치는 경우 의미가 같은 코드는 통합하고
 * 다른 경우 접두어로 구분한다.
 */
@Getter
@RequiredArgsConstructor
public enum ErrorCode {

    // devjob-user
    MEMBER_NOT_FOUND(HttpStatus.NOT_FOUND, "회원을 찾을 수 없습니다"),
    DUPLICATE_EMAIL(HttpStatus.CONFLICT, "이미 사용 중인 이메일입니다"),
    INVALID_PASSWORD(HttpStatus.UNAUTHORIZED, "비밀번호가 틀렸습니다"),

    // devjob-job
    JOB_NOT_FOUND(HttpStatus.NOT_FOUND, "채용 공고를 찾을 수 없습니다"),
    COMPANY_NOT_FOUND(HttpStatus.NOT_FOUND, "회사를 찾을 수 없습니다"),
    JOB_CLOSED(HttpStatus.BAD_REQUEST, "마감된 공고입니다"),

    // devjob-application
    ALREADY_APPLIED(HttpStatus.CONFLICT, "이미 지원한 공고입니다"),
    APPLICATION_NOT_FOUND(HttpStatus.NOT_FOUND, "지원 내역을 찾을 수 없습니다"),
    JOB_SERVICE_UNAVAILABLE(HttpStatus.SERVICE_UNAVAILABLE, "채용 공고 서비스에 연결할 수 없습니다"),

    // devjob-notification
    NOTIFICATION_NOT_FOUND(HttpStatus.NOT_FOUND, "알림 내역을 찾을 수 없습니다"),
    NOTIFICATION_SEND_FAILED(HttpStatus.INTERNAL_SERVER_ERROR, "알림 발송에 실패했습니다"),

    // 공통
    VALIDATION_ERROR(HttpStatus.BAD_REQUEST, "입력값이 올바르지 않습니다"),
    INVALID_SORT_PROPERTY(HttpStatus.BAD_REQUEST, "정렬에 사용할 수 없는 필드입니다"),
    INTERNAL_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "서버 오류가 발생했습니다");

    private final HttpStatus status;
    private final String message;
}
