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 TamanioValidator implements ConstraintValidator<Tamanio, Presupuesto>{

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

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

        Integer min = variableService.getValorEntero("ancho_alto_min");
        Integer max = variableService.getValorEntero("ancho_alto_max");


        if (presupuesto.getAncho() <= min || presupuesto.getAncho() >= max) {

            String mensajeInterpolado = messageSource.getMessage(
                    "presupuesto.errores.ancho.min_max", // clave del mensaje
                    new Object[] { min, max }, // parámetros para {0}
                    LocaleContextHolder.getLocale() // respeta el idioma actual
            );
            context.disableDefaultConstraintViolation();
            context.buildConstraintViolationWithTemplate(mensajeInterpolado)
                    .addConstraintViolation();
            return false;
        }
        else if (presupuesto.getAlto() <= min || presupuesto.getAlto() >= max) {

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