package com.unicorn.hgzero.common.exception;

import lombok.Getter;

/**
 * 비즈니스 로직 예외
 * 비즈니스 규칙 위반 또는 비즈니스 로직 처리 중 발생하는 예외
 */
@Getter
public class BusinessException extends RuntimeException {

    /**
     * 에러 코드
     */
    private final ErrorCode errorCode;

    /**
     * 에러 상세 정보
     */
    private final Object details;

    /**
     * 비즈니스 예외 생성
     *
     * @param errorCode 에러 코드
     */
    public BusinessException(ErrorCode errorCode) {
        super(errorCode.getMessage());
        this.errorCode = errorCode;
        this.details = null;
    }

    /**
     * 비즈니스 예외 생성 (메시지 커스터마이징)
     *
     * @param errorCode 에러 코드
     * @param message 커스텀 메시지
     */
    public BusinessException(ErrorCode errorCode, String message) {
        super(message);
        this.errorCode = errorCode;
        this.details = null;
    }

    /**
     * 비즈니스 예외 생성 (상세 정보 포함)
     *
     * @param errorCode 에러 코드
     * @param message 커스텀 메시지
     * @param details 에러 상세 정보
     */
    public BusinessException(ErrorCode errorCode, String message, Object details) {
        super(message);
        this.errorCode = errorCode;
        this.details = details;
    }

    /**
     * 비즈니스 예외 생성 (원인 예외 포함)
     *
     * @param errorCode 에러 코드
     * @param cause 원인 예외
     */
    public BusinessException(ErrorCode errorCode, Throwable cause) {
        super(errorCode.getMessage(), cause);
        this.errorCode = errorCode;
        this.details = null;
    }
}
