package com.spring.common.validation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import javax.validation.Constraint;
import javax.validation.Payload;

/**
 * Cron 표현식의 유효성을 검사하기 위한 제약 조건 어노테이션입니다.
 * 
 * <p>이 어노테이션은 필드에 적용되어 해당 값이 유효한 Cron 표현식인지 확인합니다.</p>
 * 
 * <p>CronExpressionValidator 클래스를 사용하여 유효성 검사를 수행합니다.</p>
 * 
 * @author mindol
 * @version 1.0
 */
@Documented
@Constraint(validatedBy = CronExpressionValidator.class)
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ValidCronExpression {
    /**
     * 유효성 검사 실패 시 반환할 메시지입니다.
     * 
     * @return 유효성 검사 실패 메시지
     */
    String message() default "Invalid cron expression";

    /**
     * 제약 조건 그룹을 지정합니다.
     * 
     * <p>유효성 검사 그룹을 정의하여 특정 상황에서만 유효성 검사를 수행할 수 있습니다.</p>
     * 
     * @return 제약 조건 그룹
     */
    Class<?>[] groups() default {};

    /**
     * 페이로드를 지정합니다.
     * 
     * <p>제약 조건에 대한 추가 정보를 제공하는 데 사용됩니다.</p>
     * 
     * @return 페이로드 클래스 배열
     */
    Class<? extends Payload>[] payload() default {};
}
