package com.spring.common.error;

import lombok.Getter;

/**
 * 비즈니스 로직에서 발생할 수 있는 예외를 나타내는 클래스입니다.
 * 
 * <p>이 클래스는 RuntimeException을 확장하여 비즈니스 로직에서 발생하는
 * 특정 오류를 처리하는 데 사용됩니다.</p>
 * 
 * <p>각 예외는 ErrorRule을 통해 정의된 오류 규칙을 기반으로 하며,
 * 해당 규칙에 대한 메시지를 포함합니다.</p>
 * 
 * @author mindol
 * @version 1.0
 */
@Getter
public class BizBaseException extends RuntimeException {

    /**
     * 오류 규칙을 나타내는 객체입니다.
     * 
     * <p>이 필드는 발생한 예외의 유형을 정의하는 ErrorRule 객체입니다.</p>
     */
    private final ErrorRule errorRule;

    private final String customMessage;

    /**
     * 기본 생성자입니다.
     * 
     * <p>기본 오류 규칙인 SYSTEM_ERROR를 사용하여 BizBaseException을 초기화합니다.</p>
     */
    public BizBaseException() {
        super(ExceptionRule.SYSTEM_ERROR.getMessage());
        this.errorRule = ExceptionRule.SYSTEM_ERROR;
        this.customMessage = null;
    }
    
    /**
     * 주어진 오류 규칙을 사용하여 BizBaseException을 초기화합니다.
     * 
     * @param exceptionRule 발생한 예외의 오류 규칙
     */
    public BizBaseException(ErrorRule exceptionRule) {
        super(exceptionRule.getMessage());
        this.errorRule = exceptionRule;
        this.customMessage = null;
    }

    public BizBaseException(ErrorRule errorRule, String message) {
        super(message);
        this.errorRule = errorRule;
        this.customMessage = message;
    }

    public BizBaseException(String message) {
        super(ExceptionRule.SYSTEM_ERROR.getMessage());
        this.errorRule = ExceptionRule.SYSTEM_ERROR;
        this.customMessage = message;
    }
    
}
