package com.imprimelibros.erp.presupuesto.validation;

import com.imprimelibros.erp.configurationERP.VariableService;
import com.imprimelibros.erp.presupuesto.Presupuesto;

import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;

public class ConsistentTiradasValidator implements ConstraintValidator<ConsistentTiradas, Presupuesto> {

    @Autowired
    private VariableService variableService;
    @Autowired
    private MessageSource messageSource;

    @Override
    public boolean isValid(Presupuesto presupuesto, ConstraintValidatorContext context) {
        if (presupuesto == null)
            return true;

        Integer[] tiradas = presupuesto.getTiradas();
        Integer podValue = variableService.getValorEntero("POD");

        boolean allAbove = true;
        boolean allBelow = true;

        for (Integer t : tiradas) {
            if (t == null)
                continue;
            if (t <= podValue)
                allAbove = false;
            else // (t > podValue)
                allBelow = false;
        }

        if (!(allAbove || allBelow)) {

            String mensajeInterpolado = messageSource.getMessage(
                    "presupuesto.errores.tiradas.consistentes", // clave del mensaje
                    new Object[] { podValue }, // parámetros para {0}
                    LocaleContextHolder.getLocale() // respeta el idioma actual
            );
            context.disableDefaultConstraintViolation();
            context.buildConstraintViolationWithTemplate(mensajeInterpolado)
                    .addConstraintViolation();
            return false;
        }
        return true;
    }
}
