// Validação de CPF
function validarCPF(cpf) {
    cpf = cpf.replace(/[^\d]/g, '');
    
    if (cpf.length !== 11) return false;
    
    // Verifica se todos os dígitos são iguais
    if (/^(\d)\1{10}$/.test(cpf)) return false;
    
    // Validação do primeiro dígito verificador
    let soma = 0;
    for (let i = 0; i < 9; i++) {
        soma += parseInt(cpf.charAt(i)) * (10 - i);
    }
    let resto = 11 - (soma % 11);
    let dv1 = resto > 9 ? 0 : resto;
    
    if (dv1 !== parseInt(cpf.charAt(9))) return false;
    
    // Validação do segundo dígito verificador
    soma = 0;
    for (let i = 0; i < 10; i++) {
        soma += parseInt(cpf.charAt(i)) * (11 - i);
    }
    resto = 11 - (soma % 11);
    let dv2 = resto > 9 ? 0 : resto;
    
    if (dv2 !== parseInt(cpf.charAt(10))) return false;
    
    return true;
}

// Validação de email
function validarEmail(email) {
    const re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
    return re.test(email);
}

// Validação de telefone
function validarTelefone(telefone) {
    telefone = telefone.replace(/[^\d]/g, '');
    return telefone.length >= 10 && telefone.length <= 11;
}

// Inicialização dos formulários
document.addEventListener('DOMContentLoaded', function() {
    // Validação personalizada para CPF
    const cpfInputs = document.querySelectorAll('input[name="cpf"]');
    cpfInputs.forEach(input => {
        input.addEventListener('blur', function() {
            const cpf = this.value;
            if (!validarCPF(cpf)) {
                this.setCustomValidity('CPF inválido');
                this.classList.add('is-invalid');
            } else {
                this.setCustomValidity('');
                this.classList.remove('is-invalid');
            }
        });
    });
    
    // Validação personalizada para email
    const emailInputs = document.querySelectorAll('input[type="email"]');
    emailInputs.forEach(input => {
        input.addEventListener('blur', function() {
            const email = this.value;
            if (!validarEmail(email)) {
                this.setCustomValidity('Email inválido');
                this.classList.add('is-invalid');
            } else {
                this.setCustomValidity('');
                this.classList.remove('is-invalid');
            }
        });
    });
    
    // Validação personalizada para telefone
    const phoneInputs = document.querySelectorAll('input[name="telefone"]');
    phoneInputs.forEach(input => {
        input.addEventListener('blur', function() {
            const telefone = this.value;
            if (!validarTelefone(telefone)) {
                this.setCustomValidity('Telefone inválido');
                this.classList.add('is-invalid');
            } else {
                this.setCustomValidity('');
                this.classList.remove('is-invalid');
            }
        });
    });
    
    // Validação de campos monetários
    const moneyInputs = document.querySelectorAll('input[type="number"][step="0.01"]');
    moneyInputs.forEach(input => {
        input.addEventListener('blur', function() {
            const value = parseFloat(this.value);
            if (isNaN(value) || value < 0) {
                this.setCustomValidity('Valor inválido');
                this.classList.add('is-invalid');
            } else {
                this.setCustomValidity('');
                this.classList.remove('is-invalid');
                this.value = value.toFixed(2);
            }
        });
    });
    
    // Validação de datas
    const dateInputs = document.querySelectorAll('input[type="date"]');
    dateInputs.forEach(input => {
        input.addEventListener('change', function() {
            const date = new Date(this.value);
            const today = new Date();
            
            if (this.hasAttribute('min')) {
                const minDate = new Date(this.getAttribute('min'));
                if (date < minDate) {
                    this.setCustomValidity(`A data não pode ser anterior a ${minDate.toLocaleDateString()}`);
                    this.classList.add('is-invalid');
                    return;
                }
            }
            
            if (this.hasAttribute('max')) {
                const maxDate = new Date(this.getAttribute('max'));
                if (date > maxDate) {
                    this.setCustomValidity(`A data não pode ser posterior a ${maxDate.toLocaleDateString()}`);
                    this.classList.add('is-invalid');
                    return;
                }
            }
            
            this.setCustomValidity('');
            this.classList.remove('is-invalid');
        });
    });
    
    // Feedback visual para campos obrigatórios
    const requiredInputs = document.querySelectorAll('input[required], select[required], textarea[required]');
    requiredInputs.forEach(input => {
        const label = input.previousElementSibling;
        if (label && label.tagName === 'LABEL') {
            label.innerHTML += ' <span class="text-danger">*</span>';
        }
    });
}); 