package com.spring.common.error;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

/**
 * 요청에서 거부된 값을 나타내는 클래스입니다.
 * 
 * <p>이 클래스는 유효성 검사에서 실패한 필드와 관련된 정보를 포함합니다.</p>
 * 
 * <p>각 RejectedValue 객체는 필드 이름, 거부된 값, 그리고 거부 사유를 저장합니다.</p>
 * 
 * @author mindol
 * @version 1.0
 */
@Getter
@RequiredArgsConstructor
public class RejectedValue {

    /**
     * 거부된 필드의 이름입니다.
     * 
     * <p>유효성 검사에서 실패한 필드의 이름을 나타냅니다.</p>
     */
    private final String field;

    /**
     * 거부된 값입니다.
     * 
     * <p>유효성 검사에서 실패한 값입니다.</p>
     */
    private final Object value;

    /**
     * 거부 사유입니다.
     * 
     * <p>유효성 검사에서 실패한 이유를 설명하는 메시지입니다.</p>
     */
    private final String reason;

    /**
     * RejectedValue 객체를 생성하는 정적 팩토리 메서드입니다.
     * 
     * <p>주어진 필드 이름, 값, 및 사유를 사용하여 RejectedValue 객체를 생성합니다.</p>
     * 
     * @param field 거부된 필드의 이름
     * @param value 거부된 값
     * @param reason 거부 사유
     * @return 생성된 RejectedValue 객체
     */
    public static RejectedValue of(String field, Object value, String reason) {
        return new RejectedValue(field, value, reason);
    }
    
}
