
// Función para validar el tipo de documento y configurar restricciones
function validarTipoDocumento(preloading = false) {
  const tipoDocumento = $('#idtipo_documento').val(); // Obtiene el ID del tipo de documento seleccionado
  const numDocumentoInput = $('#num_documento');
  const numDocumentoHelp = $('#num_documento_help');

  if (!preloading) {
      numDocumentoInput.val(''); // Reinicia el campo de número de documento
  }
  numDocumentoHelp.text(''); // Limpia el texto de ayuda

  // Aplica validaciones según el tipo de documento
  if (tipoDocumento === '1') { // Asume que '1' es DNI
      numDocumentoInput.attr('data-maxlength', 8); // Valor personalizado para validación
      numDocumentoHelp.text('El número de documento debe tener exactamente 8 dígitos (DNI).');
  } else if (tipoDocumento === '2') { // Asume que '2' es RUC
      numDocumentoInput.attr('data-maxlength', 11); // Valor personalizado para validación
      numDocumentoHelp.text('El número de documento debe tener exactamente 11 dígitos (RUC).');
  } else {
      numDocumentoInput.removeAttr('data-maxlength'); // Quita cualquier restricción si no aplica
      numDocumentoHelp.text('Seleccione un tipo de documento válido.');
  }
}
function init(){

    $("#frmForm").on("submit", function(e) {
       guardaryeditar(e);
    });
      $.post("ajax/cliente.php?op=selectTipoDocumento", function(r){
            if ($.fn.select2 && $('#idtipo_documento').data('select2')) {
                $('#idtipo_documento').select2('destroy');
            }
            // Actualizar el contenido del select
            $("#idtipo_documento").html(r);
            
            // Inicializar Select2 nuevamente
            $('#idtipo_documento').select2({
                theme: 'bootstrap4',
                placeholder: 'Seleccione Tipo Documento',
                allowClear: true,
            });
            // Ejecuta la validación inicial después de cargar el select
            validarTipoDocumento();
            });

     // Cargar departamentos en el select
      $.post("ajax/cliente.php?op=selectDepartamentos", function (r) {
        $("#iddepartamento").html(r).select2({
            theme: "bootstrap4",
            placeholder: "Seleccione Departamento",
            allowClear: true,
        });
    });

      // Escuchar cambios en el select de Departamento
      $("#iddepartamento").change(function () {
          const iddepartamento = $(this).val();
          if (iddepartamento) {
              $.post("ajax/cliente.php?op=getProvinciasByDepartamento", { iddepartamento: iddepartamento }, function (response) {
                $("#idprovincia").html(response).select2({
                  theme: "bootstrap4",
                  placeholder: "Seleccione Provincia",
                  allowClear: true,
              });
                  
              });
          }
          // Limpiar el select de Distritos si no hay provincia seleccionada
          $("#iddistrito").html('<option></option>').select2({
              theme: "bootstrap4",
              placeholder: "Seleccione Distrito",
              allowClear: true,
          });
      });

      // Escuchar cambios en el select de Provincia
      $("#idprovincia").change(function () {
          const idprovincia = $(this).val();
          if (idprovincia) {
              $.post("ajax/cliente.php?op=getDistritosByProvincia", { idprovincia: idprovincia }, function (response) {
                $("#iddistrito").html(response).select2({
                  theme: "bootstrap4",
                  placeholder: "Seleccione Distrito",
                  allowClear: true,
              });
                  
              });
          }
      });


       // Evento change para actualizar la validación cuando se cambia el tipo de documento
    $('#idtipo_documento').on('change', validarTipoDocumento);

    // Validación en tiempo real para restringir la longitud del número
    $('#num_documento').on('input', function () {
        const maxLength = $(this).attr('data-maxlength'); // Obtiene el valor máximo permitido
        const value = $(this).val();

        if (maxLength && value.length > maxLength) {
            $(this).val(value.slice(0, maxLength)); // Trunca el valor a la longitud máxima
        }
    });
      

}

function consultarCliente() {
    const dni = document.getElementById('inputDNI').value.trim();
    const resultado = document.getElementById('resultadoDNI');
    const btnActualizar = document.getElementById('accionesActualizar');
    const btnRegistrar = document.getElementById('accionesRegistro');
    const btnActualizarCliente = btnActualizar.querySelector('button');

    // Ocultar botones y formularios antes de nueva búsqueda
    btnActualizar.style.display = 'none';
    btnRegistrar.style.display = 'none';
    document.getElementById('formulario_cliente').style.display = 'none';
    resultado.innerText = '';

    if (dni === "") {
        resultado.innerText = "Por favor, ingrese solo DNI/RUC o solo Nombre Completo, no ambos.";
        return;
    }

    if (!/^\d{8}$/.test(dni) && !/^\d{11}$/.test(dni)) {
        resultado.innerText = "Ingrese un DNI (8 dígitos) o RUC (11 dígitos) válido.";
        return;
    }

    resultado.innerText = "Consultando...";

    $.ajax({
        url: 'ajax/cliente.php?op=consultarDNI',
        type: 'POST',
        dataType: 'json',
        data: { dni: dni },
        success: function(response) {
            if (response.existe) {
                resultado.innerHTML = `✅ DNI/RUC ${dni} está registrado como <strong>${response.nombre}</strong>.`;
                btnActualizar.style.display = 'block';
                btnActualizarCliente.setAttribute('data-idpersona', response.idpersona);
                btnActualizarCliente.dataset.nombre = response.nombre;
                btnActualizarCliente.dataset.idtipo_documento = response.idtipo_documento;
                btnActualizarCliente.dataset.numero_documento = response.numero_documento;
                btnActualizarCliente.dataset.iddepartamento = response.iddepartamento;
                btnActualizarCliente.dataset.idprovincia = response.idprovincia;
                btnActualizarCliente.dataset.iddistrito = response.iddistrito;
                btnActualizarCliente.dataset.direccion = response.direccion;
                btnActualizarCliente.dataset.email = response.email;
                btnActualizarCliente.dataset.numero_celular = response.numero_celular;

                // ✅ Solo ocultamos consulta si sí existe y va a actualizar

            } else {
                resultado.innerHTML = `❌ DNI/RUC ${dni} no está registrado.`;
                btnRegistrar.style.display = 'block';
            }
        },
        error: function() {
            resultado.innerText = "❌ Error en la consulta. Inténtalo de nuevo.";
        }
    });
}


document.addEventListener('DOMContentLoaded', function () {
    document.querySelector('#accionesActualizar button').addEventListener('click', function () {
        const idPersona = this.getAttribute('data-idpersona');
        const nombre = this.getAttribute('data-nombre');
        const documento = this.getAttribute('data-idtipo_documento');
        const numero_documento = this.getAttribute('data-numero_documento');
        const iddepartamento = this.getAttribute('data-iddepartamento');
        const idprovincia = this.getAttribute('data-idprovincia');
        const iddistrito = this.getAttribute('data-iddistrito');
        const direccion = this.getAttribute('data-direccion');
        const email = this.getAttribute('data-email');
        const numero_celular = this.getAttribute('data-numero_celular');

        const formularioCliente = document.getElementById('formulario_cliente');
        const inputIdPersona = document.getElementById('idpersona');
        const inputNombre = document.getElementById('nombre');
        const tituloFormulario = document.getElementById('idtitle');
         $("#num_documento").val(numero_documento);
         $("#direccion").val(direccion);
         $("#email").val(email);
         $("#numero_celular").val(numero_celular);
         $("#idtipo_documento").val(documento).trigger('change');
              setTimeout(function () {
        // Asignar departamento y cargar provincias
        $("#iddepartamento").val(iddepartamento).trigger('change');

        setTimeout(function () {
            // Asignar provincia y cargar distritos
            $("#idprovincia").val(idprovincia).trigger('change');

            setTimeout(function () {
                // Asignar distrito
                $("#iddistrito").val(iddistrito).trigger('change');
             }, 300); // Esperar a que los distritos se carguen
            }, 300); // Esperar a que las provincias se carguen
        },300);

        document.getElementById("formulario_consulta_cliente").style.setProperty('display', 'none', 'important');

        // Preparar el formulario de actualización
        inputIdPersona.value = idPersona;
        inputNombre.value = nombre;
       // inputTipo.value = documento;
        tituloFormulario.innerHTML = '<i class="fas fa-user-edit"></i> Actualizar Cliente';
        formularioCliente.style.display = 'block';
    });

    document.querySelector('#accionesRegistro button').addEventListener('click', function () {
        const formularioCliente = document.getElementById('formulario_cliente');
        const inputIdPersona = document.getElementById('idpersona');
        const tituloFormulario = document.getElementById('idtitle');

        inputIdPersona.value = '';
        tituloFormulario.innerHTML = '<i class="fas fa-user-plus"></i> Registro Cliente';
        formularioCliente.style.display = 'block';

        document.getElementById("formulario_consulta_cliente").style.setProperty('display', 'none', 'important');// Ocultar formulario de consulta solo al registrar
       
    });
});

// Configuración de SweetAlert2 con botones personalizados
const swalWithBootstrapButtons = Swal.mixin({
  customClass: {
    confirmButton: "btn btn-success mx-2", // Añadimos margen (Bootstrap `me-2`) para separar los botones
    cancelButton: "btn btn-danger mx-2"
  },
  buttonsStyling: false
});

function guardaryeditar(e) {
  e.preventDefault(); // Evitar acción predeterminada
  $("#btnGuardar").prop("disabled", true); // Deshabilitar el botón para evitar múltiples envíos
  var formData = new FormData($("#frmForm")[0]);

  swalWithBootstrapButtons.fire({
    title: "¿Estás seguro?",
    text: "¿Deseas guardar los cambios realizados?",
    icon: "warning",
    showCancelButton: true,
    confirmButtonText: "Sí, guardar",
    cancelButtonText: "No, cancelar",
    reverseButtons: true
  }).then((result) => {
    if (result.isConfirmed) {
      // Si el usuario confirma, realizar la solicitud AJAX
      $.ajax({
        url: "ajax/cliente.php?op=guardaryeditar",
        type: "POST",
        data: formData,
        contentType: false,
        processData: false,
        success: function (datos) {
          // Mostrar mensaje de éxito o error según la respuesta del backend
          swalWithBootstrapButtons.fire({
            title: 'Resultado',
            text: datos, // Mostrar el mensaje devuelto por el backend
            icon: datos.includes("Cliente Registrado") || datos.includes("Cliente Actualizada") ? 'success' : 'error',
            confirmButtonText: 'Aceptar'
          }).then(() => {
            if (datos.includes("Cliente Registrado") || datos.includes("Cliente Actualizada")) {
              // Redirigir al listado si la operación fue exitosa
              window.location.href = "cliente.php";
              limpiar();
            } else {
              // Si hubo un error, redirigir al formulario de creación
              window.location.href = "cliente.php";
            }
          });
        },
        error: function (err) {
          // Manejar errores en la solicitud AJAX
          swalWithBootstrapButtons.fire({
            title: 'Error',
            text: 'Hubo un problema con la solicitud. Intente nuevamente.',
            icon: 'error',
            confirmButtonText: 'Aceptar'
          }).then(() => {
            $("#btnGuardar").prop("disabled", false); // Rehabilitar el botón tras un error
          });
        }
      });
    } else if (result.dismiss === Swal.DismissReason.cancel) {
      // Si el usuario cancela, mostrar un mensaje de cancelación
      swalWithBootstrapButtons.fire({
        title: "Cancelado",
        text: "No se realizaron cambios.",
        icon: "error",
        confirmButtonText: "Aceptar"
      }).then(() => {
        $("#btnGuardar").prop("disabled", false); // Rehabilitar el botón si se cancela
      });
    }
  }).finally(() => {
    $("#btnGuardar").prop("disabled", false); // Asegurar que el botón se habilite al final
  });
  
}

init();