document.addEventListener('DOMContentLoaded', function () {
    const dniInput = document.getElementById('dni');
    const nombres = document.getElementById('nombres');
    const apellidoPaterno = document.getElementById('apellido_paterno');
    const apellidoMaterno = document.getElementById('apellido_materno');
    const msgBox = document.getElementById('dni-consulta-msg');

    if (!dniInput) return;

    if (!window.reniecConfig || !window.reniecConfig.url || !window.reniecConfig.csrfToken) {
        console.error('No existe configuracion RENIEC en window.reniecConfig');
        return;
    }

    const URL = window.reniecConfig.url;
    const CSRF = window.reniecConfig.csrfToken;

    function camposNombre() {
        return [nombres, apellidoPaterno, apellidoMaterno].filter(Boolean);
    }

    function limpiarCampos() {
        if (nombres) nombres.value = '';
        if (apellidoPaterno) apellidoPaterno.value = '';
        if (apellidoMaterno) apellidoMaterno.value = '';
    }

    function bloquearCamposNombre(bloquear) {
        camposNombre().forEach(function (campo) {
            campo.readOnly = bloquear;
            if (bloquear) {
                campo.setAttribute('readonly', 'readonly');
            } else {
                campo.removeAttribute('readonly');
            }
        });
    }

    function mostrarMensaje(tipo, mensaje) {
        if (!msgBox) return;

        let clase = 'alert alert-info py-2 px-3 mb-0';
        if (tipo === 'success') clase = 'alert alert-success py-2 px-3 mb-0';
        if (tipo === 'error') clase = 'alert alert-danger py-2 px-3 mb-0';
        if (tipo === 'warning') clase = 'alert alert-warning py-2 px-3 mb-0';

        msgBox.innerHTML = `<div class="${clase}" role="alert">${mensaje}</div>`;
    }

    async function consultarDni(dni) {
        limpiarCampos();
        bloquearCamposNombre(false);
        mostrarMensaje('info', 'Consultando DNI...');

        try {
            const response = await fetch(URL, {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json',
                    'X-CSRF-TOKEN': CSRF,
                    'Accept': 'application/json',
                    'X-Requested-With': 'XMLHttpRequest'
                },
                body: JSON.stringify({ dni: dni })
            });

            let data = {};
            try {
                data = await response.json();
            } catch (e) {
                data = {};
            }

            if (!response.ok || !data.success) {
                bloquearCamposNombre(false);
                if (response.status === 404) {
                    mostrarMensaje('warning', 'No existe numero de consulta. Puede ingresar los datos manualmente.');
                } else if (response.status === 422) {
                    mostrarMensaje('warning', data.message || 'El DNI debe tener 8 digitos numericos.');
                } else if (response.status === 419) {
                    mostrarMensaje('error', 'Token CSRF expirado. Recargue la pagina.');
                } else if (response.status === 401) {
                    mostrarMensaje('error', 'La sesion expiro. Vuelva a iniciar sesion.');
                } else {
                    mostrarMensaje('error', data.message || 'Ocurrio un error al consultar RENIEC.');
                }

                console.error('Respuesta error:', response.status, data);
                return;
            }

            if (nombres) nombres.value = data.nombres || '';
            if (apellidoPaterno) apellidoPaterno.value = data.apellido_paterno || '';
            if (apellidoMaterno) apellidoMaterno.value = data.apellido_materno || '';
            bloquearCamposNombre(true);

            if (data.source === 'clientes') {
                mostrarMensaje('success', 'Datos encontrados en la tabla clientes.');
            } else if (data.source === 'reniec') {
                mostrarMensaje('success', 'Datos consultados en RENIEC y guardados en clientes.');
            } else {
                mostrarMensaje('success', 'Consulta realizada correctamente.');
            }
        } catch (error) {
            bloquearCamposNombre(false);
            mostrarMensaje('error', 'No se pudo conectar con el servicio RENIEC.');
            console.error('Error fetch RENIEC:', error);
        }
    }

    function procesarConsulta() {
        const dni = dniInput.value.trim();

        if (!/^\d{8}$/.test(dni)) {
            bloquearCamposNombre(false);
            if (dni.length > 0) {
                mostrarMensaje('warning', 'Ingrese un DNI valido de 8 digitos.');
            } else if (msgBox) {
                msgBox.innerHTML = '';
            }

            return;
        }

        consultarDni(dni);
    }

    dniInput.addEventListener('blur', procesarConsulta);

    dniInput.addEventListener('keydown', function (e) {
        if (e.key === 'Enter') {
            e.preventDefault();
            procesarConsulta();
        }
    });

    dniInput.addEventListener('input', function () {
        this.value = this.value.replace(/\D/g, '');

        if (this.value.length === 8) {
            procesarConsulta();
        } else {
            bloquearCamposNombre(false);
            if (msgBox) msgBox.innerHTML = '';
        }
    });

    bloquearCamposNombre(false);
});
