package com.imprimelibros.erp.shared.validation;

import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.*;

import jakarta.validation.Constraint;
import jakarta.validation.Payload;

@Documented
@Target(TYPE)
@Retention(RUNTIME)
@Constraint(validatedBy = NoRangeOverlapValidator.class)
public @interface NoRangeOverlap {

    // Campos obligatorios
    String min();                 // nombre del campo min (Integer/Long/etc.)
    String max();                 // nombre del campo max

    // Campos opcionales
    String id() default "id";     // nombre del campo ID (para excluir self en update)
    String[] partitionBy() default {}; // ej. {"tipoEncuadernacion","tipoCubierta"}

    // Soft delete opcional
    String deletedFlag() default ""; // ej. "deleted" (si vacío, no se aplica filtro)
    boolean deletedActiveValue() default false; // qué valor significa "activo" (normalmente false)

    // Mensajes
    String message() default "{validation.range.overlaps}";
    String invalidRangeMessage() default "{validation.range.invalid}";

    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}
