package dev.lions.unionflow.client.validation;

import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
import java.util.regex.Pattern;

public class PhoneNumberValidator implements ConstraintValidator<ValidPhoneNumber, String> {
    
    // Patterns pour différents formats de téléphone africains
    private static final Pattern[] PHONE_PATTERNS = {
        Pattern.compile("^(\\+225|225)?[0-9]{8}$"),        // Côte d'Ivoire
        Pattern.compile("^(\\+221|221)?[0-9]{9}$"),        // Sénégal  
        Pattern.compile("^(\\+226|226)?[0-9]{8}$"),        // Burkina Faso
        Pattern.compile("^(\\+223|223)?[0-9]{8}$"),        // Mali
        Pattern.compile("^(\\+228|228)?[0-9]{8}$"),        // Togo
        Pattern.compile("^(\\+229|229)?[0-9]{8}$"),        // Bénin
        Pattern.compile("^(\\+233|233)?[0-9]{9}$"),        // Ghana
        Pattern.compile("^(\\+234|234)?[0-9]{10}$"),       // Nigeria
        Pattern.compile("^[0-9]{8,15}$")                   // Format générique
    };
    
    @Override
    public void initialize(ValidPhoneNumber constraintAnnotation) {
        // Initialisation si nécessaire
    }
    
    @Override
    public boolean isValid(String phone, ConstraintValidatorContext context) {
        // Null ou vide = valide (utiliser @NotBlank si obligatoire)
        if (phone == null || phone.trim().isEmpty()) {
            return true;
        }
        
        // Nettoyer le numéro (supprimer espaces, tirets, etc.)
        String cleanPhone = phone.replaceAll("[\\s\\-\\(\\)\\.]", "");
        
        // Vérifier contre tous les patterns
        for (Pattern pattern : PHONE_PATTERNS) {
            if (pattern.matcher(cleanPhone).matches()) {
                return true;
            }
        }
        
        return false;
    }
}
