var tabla;
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(){
    listar();
    listar_detalle();

    $("#frmForm").on("submit", function(e) {
        guardaryeditar(e);
    });

    $("#frmFormActualizar").on("submit", function(e) {
        guardaryeditarActualizar(e);
    });

    $("#clienteForm").on("submit", function(e) {
      guardarCliente(e);
    });

     $.post("../../ajax/cliente.php?op=selectCliente", function(r) {
        if ($.fn.select2 && $('#idpersona').data('select2')) {
          $('#idpersona').select2('destroy');
        }
            // Limpiar las opciones antes de agregar las nuevas
        $("#idpersona").html('<option value="">Seleccione Cliente </option>'); 
        // Actualizar el contenido del select con las opciones de producto
        $("#idpersona").append(r);
        // Inicializar Select2 nuevamente
        $('#idpersona').select2({
          theme: 'bootstrap4',
          placeholder: 'Seleccione un cliente ',
          allowClear: true,
        });
      });

      $.post("../../ajax/pabellon.php?op=selectPabellon", function (r) {
        if ($.fn.select2 && $('#idpabellon').data('select2')) {
            $('#idpabellon').select2('destroy');
        }

        $("#idpabellon").html('<option value="">Seleccione un Pabellon</option>');
        $("#idpabellon").append(r);

        // Inicializar Select2 nuevamente
        $('#idpabellon').select2({
            theme: 'bootstrap4',
            placeholder: 'Seleccione Pabellon',
            allowClear: true
        });

        // Esperar un pequeño tiempo para asegurar que las opciones se rendericen antes de seleccionar
        setTimeout(function () {
            // Obtener el primer valor válido (distinto de "")
            let firstValid = $('#idpabellon option[value!=""]').first().val();
            if (firstValid) {
                $('#idpabellon').val(firstValid).trigger('change'); // Cambiar valor y activar eventos
                mostrarDetallePabellon(firstValid); // Llamar a la función directamente
            }
        }, 200);
    });

    $.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();
    });

    $('#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
          }
      });

    $("#imagenmuestra").hide();   
        
}
//Función limpiar
function limpiar()
{
    $("#idpabellon").val("");
    $("#nombre").val("");
    $("#imagen").val("");
    $("#total_fila").val("");
    $("#total_columna").val("");
    
}
// Función para listar datos
function listar() {
    tabla=$("#producto").DataTable({
        "responsive": true,
        "autoWidth": false,
        "ajax": {
            url: '../../ajax/pabellon.php?op=listarpabellon',
            type: "GET",
            dataType: "json",
            error: function(e) {
                console.error("Error en la solicitud AJAX:", e.responseText);
                alert("No se pudo cargar la tabla. Verifique la consola.");
            }
        },
        "language": {
            "sProcessing": "Procesando...",
            "sLengthMenu": "Mostrar _MENU_ registros",
            "sZeroRecords": "No se encontraron resultados",
            "sEmptyTable": "Ningún dato disponible en esta tabla",
            "sInfo": "Mostrando registros del _START_ al _END_ de un total de _TOTAL_",
            "sInfoEmpty": "Mostrando registros del 0 al 0 de un total de 0",
            "sInfoFiltered": "(filtrado de un total de _MAX_ registros)",
            "sSearch": "Buscar:",
            "oPaginate": {
                "sFirst": "Primero",
                "sLast": "Último",
                "sNext": "Siguiente",
                "sPrevious": "Anterior"
            }
          },
          "bDestroy": true,
          "order": [[ 0, "desc" ]]//Ordenar (columna,orden)
    });
}

function listar_detalle() {
    tabla=$("#list_detalle").DataTable({
        "responsive": true,
        "autoWidth": false,
        "ajax": {
            url: '../../ajax/pabellon.php?op=listar_detalle',
            type: "GET",
            dataType: "json",
            error: function(e) {
                console.error("Error en la solicitud AJAX:", e.responseText);
                alert("No se pudo cargar la tabla. Verifique la consola.");
            }
        },
        "language": {
            "sProcessing": "Procesando...",
            "sLengthMenu": "Mostrar _MENU_ registros",
            "sZeroRecords": "No se encontraron resultados",
            "sEmptyTable": "Ningún dato disponible en esta tabla",
            "sInfo": "Mostrando registros del _START_ al _END_ de un total de _TOTAL_",
            "sInfoEmpty": "Mostrando registros del 0 al 0 de un total de 0",
            "sInfoFiltered": "(filtrado de un total de _MAX_ registros)",
            "sSearch": "Buscar:",
            "oPaginate": {
                "sFirst": "Primero",
                "sLast": "Último",
                "sNext": "Siguiente",
                "sPrevious": "Anterior"
            }
          },
          "bDestroy": true
    });
}


// Configuración de SweetAlert2 con botones pabellonlizados
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
});

// Función para guardar o editar
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) {
      // Mostrar precarga inmediatamente
      Swal.fire({
        title: "Generando Pabellon...",
        html: "Por favor, espera mientras se guardan los datos.",
        allowOutsideClick: false,
        didOpen: () => {
          Swal.showLoading();
        }
      });
      $.ajax({
        url: "../../ajax/pabellon.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("Pabellon Registrado") || datos.includes("Pabellon Actualizada") ? 'success' : 'error',
            confirmButtonText: 'Aceptar'
          }).then(() => {
            if (datos.includes("Pabellon Registrado") || datos.includes("Pabellon Actualizada")) {
              // Redirigir al listado si la operación fue exitosa
              window.location.href = "list.php";
              limpiar();
            } else {
              // Si hubo un error, redirigir al formulario de creación
              window.location.href = "create.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
  });
}

function guardarCliente(e) {
  e.preventDefault(); // Evitar acción predeterminada
  $("#btnCliente").prop("disabled", true); // Deshabilitar el botón para evitar múltiples envíos
  const iddetalle = $("#iddetalle_pabellon").val();
  console.log(iddetalle);
  var formData = new FormData($("#clienteForm")[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) {
      Swal.fire({
        title: "Registrando Cliente...",
        html: "Por favor, espera mientras se guardan los datos.",
        allowOutsideClick: false,
        didOpen: () => {
          Swal.showLoading();
        }
      });
      $.ajax({
        url: "../../ajax/cliente.php?op=guardarCliente",
        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 = "create_detalle.php?iddetalle_pabellon=" + encodeURIComponent(iddetalle);
              limpiar();
            } else {
              // Si hubo un error, redirigir al formulario de creación
              window.location.href = "list_pabellon.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(() => {
            $("#btnCliente").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(() => {
    $("#btnCliente").prop("disabled", false); // Asegurar que el botón se habilite al final
  });
}

// Función para guardar o editar
function guardaryeditarActualizar(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($("#frmFormActualizar")[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) {
      // Mostrar precarga inmediatamente
      Swal.fire({
        title: "Actualizando Nicho...",
        html: "Por favor, espera mientras se guardan los datos.",
        allowOutsideClick: false,
        didOpen: () => {
          Swal.showLoading();
        }
      });
      $.ajax({
        url: "../../ajax/pabellon.php?op=guardaryeditarActualizar",
        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("Nicho Actualizado") || datos.includes("Nicho Actualizado") ? 'success' : 'error',
            confirmButtonText: 'Aceptar'
          }).then(() => {
            if (datos.includes("Nicho Actualizado") || datos.includes("Nicho Actualizado")) {
              // Redirigir al listado si la operación fue exitosa
              window.location.href = "list_detalle.php";
              limpiar();
            } else {
              // Si hubo un error, redirigir al formulario de creación
              window.location.href = "create.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
  });
}

function eliminar(idpabellon) {
  const swalWithBootstrapButtons = Swal.mixin({
    customClass: {
      confirmButton: "btn btn-success mx-2",
      cancelButton: "btn btn-danger mx-2"
    },
    buttonsStyling: false
  });

  swalWithBootstrapButtons.fire({
    title: "¿Estás seguro?",
    text: "¡No podrás revertir esto!",
    icon: "warning",
    showCancelButton: true,
    confirmButtonText: "Sí, eliminar",
    cancelButtonText: "No, cancelar",
    reverseButtons: true
  }).then((result) => {
    if (result.isConfirmed) {
      // Realizar la eliminación vía AJAX
      $.post("../../ajax/pabellon.php?op=eliminar", { idpabellon: idpabellon }, function (e) {
        swalWithBootstrapButtons.fire({
          title: "Eliminado",
          text: "La pabellon ha sido eliminada exitosamente.",
          icon: "success"
        });

        // Recargar la tabla después de eliminar
        tabla.ajax.reload();
      });
    } else if (result.dismiss === Swal.DismissReason.cancel) {
      swalWithBootstrapButtons.fire({
        title: "Cancelado",
        text: "La pabellon está segura :)",
        icon: "error"
      });
    }
  });
}

$(document).ready(function () {
    
  // Obtener el parámetro idpabellon de la URL
  const urlParams = new URLSearchParams(window.location.search);
  const idpabellon = urlParams.get('idpabellon');

  if (idpabellon) {
      // Llamar a la función mostrar del backend
      $.post("../../ajax/pabellon.php?op=mostrar", { idpabellon: idpabellon }, function (data, status) {
          if (status === "success") {
              const pabellon = JSON.parse(data);

              // Precargar los campos del formulario
              $("#idpabellon").val(pabellon.idpabellon);
              //validarTipoDocumento(true); 
              $("#nombre").val(pabellon.nombre);
              $("#total_fila").val(pabellon.total_fila);
              $("#total_columna").val(pabellon.total_columna);
              $("#imagenmuestra").show();
		          $("#imagenmuestra").attr("src","../../files/pabellon/"+pabellon.imagen);
		          $("#imagenactual").val(pabellon.imagen)
              $("#btnGuardar").html('<i class="fas fa-save"></i> Actualizar registro');
              $("#idtitle").html('<i class="fas fa-plus"></i> Actualizar Registro')

          } else {
              console.error("Error al cargar los datos");
          }
      });
  }
});

$(document).ready(function () {
  // Obtener el parámetro idpabellon de la URL
  const urlParams = new URLSearchParams(window.location.search);
  const iddetalle_pabellon = urlParams.get('iddetalle_pabellon');

  if (iddetalle_pabellon) {
      // Llamar a la función mostrar del backend
      $.post("../../ajax/pabellon.php?op=mostrardetalle", { iddetalle_pabellon: iddetalle_pabellon }, function (data, status) {
          if (status === "success") {
              const detalle = JSON.parse(data);

              // Precargar los campos del formulario
              $("#iddetalle_pabellon").val(detalle.iddetalle_pabellon);
              $("#idpabellon").val(detalle.idpabellon);
              //validarTipoDocumento(true); 
              $("#idpersona").val(detalle.idpersona);
              $("#fila").val(detalle.fila);
              $("#columna").val(detalle.columna);
              setTimeout(function () {
                  $("#idpersona").val(detalle.idpersona).trigger('change');
              }, 300);
              $("#estado_nicho").val(detalle.estado_nicho).trigger('change');
              $("#btnGuardar").html('<i class="fas fa-save"></i> Actualizar registro');
              $("#idtitle").html('<i class="fas fa-plus"></i> Actualizar Registro')

          } else {
              console.error("Error al cargar los datos");
          }
      });
  }
});

function mostrarDetallePabellon(idpabellon) {
  $.ajax({
    url: '../../ajax/pabellon.php?op=mostrarDetallePabellon',
    type: 'POST',
    data: { idpabellon: idpabellon },
    dataType: 'json',
    success: function (response) {
      let data = response.detalle;
      let totalFilas = response.total_fila;
      let totalColumnas = response.total_columna;
      let nombrePabellon = response.nombre_pabellon; // Asegúrate que el backend lo mande también

      // Mostrar el nombre del pabellón
      $('#nombrePabellon').text(nombrePabellon);

      let abecedario = [
        'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'LL', 'M', 'N', 'Ñ', 'O', 'P', 'Q', 'R',
        'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
        'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X',
        'XI', 'XII', 'XIII', 'XIV', 'XV', 'XVI', 'XVII', 'XVIII', 'XIX', 'XX','XXI','XXII','XXIII','XXIV','XXV','XXVI','XXVII','XXVIII','XXIX','XXX','XXXI','XXXII','XXXIII','XXXIV','XXXV','XXXVI','XXXVII','XXXVIII','XXXIX','XL','XLI'
      ];

      // Crear matriz vacía
      let matriz = Array.from({ length: totalFilas }, () =>
        Array.from({ length: totalColumnas }, () => ({ nombre: '', estado: 1 }))
      );

      // Rellenar la matriz
      data.forEach(nicho => {
        let fila = parseInt(nicho.fila) - 1;
        let columna = parseInt(nicho.columna) - 1;
        matriz[fila][columna] = {
          nombre: (nicho.nombre_difunto && nicho.nombre_difunto.trim() !== '') 
                    ? nicho.nombre_difunto 
                    : (nicho.nombre_propietario || 'Disponible'),
          estado: parseInt(nicho.estado_nicho)
        };
      });

      // Construir la tabla
      let html = '<table class="table table-bordered w-100 mx-auto text-center" style="border: 2px solid black;"><tbody>';

      // Cabecera superior
      html += '<tr>';
      for (let c = 0; c < totalColumnas; c++) {
        html += `<td style="background:#008000; color:white; font-weight:bold; border:1px solid black; height:50px;">
                    ${abecedario[c]}
                 </td>`;
      }
      html += '</tr>';

      // Filas (de mayor a menor)
      for (let f = totalFilas - 1; f >= 0; f--) {
          html += '<tr>';
          for (let c = 0; c < totalColumnas; c++) {
            let celda = matriz[f][c];
            let clase = '';
            let label = '';
            let colorTexto = 'white'; // valor por defecto

            switch (celda.estado) {
              case 1:
                clase = '#ffffff'; // fondo claro
                label = 'Disponible';
                colorTexto = 'black'; // texto negro
                break;
              case 2:
                clase = '#fc0101'; label = 'Vendido'; break;
              case 3:
                clase = '#0DD546'; label = 'Credito'; break;
              case 4:
                clase = '#0DD546'; label = 'Credito-Futuro'; break;
              case 5:
                clase = '#F0E643'; label = 'Futuro'; break;
              case 6:
                clase = '#050505'; label = 'Enterrado'; break;
              default:
                clase = '#6c757d'; label = 'N/D'; break;
            }

            html += `<td style="background:${clase}; color:${colorTexto}; border:1px solid black; width:100px; height:80px; vertical-align:middle;">
                        <div style="font-size:16px;">${celda.nombre}</div>
                        <div style="font-size:16px;">[${label}]</div>
                    </td>`;
          }
          html += '</tr>';
        }

      // Cabecera inferior
      html += '<tr>';
      for (let c = 0; c < totalColumnas; c++) {
        html += `<td style="background:#008000; color:white; font-weight:bold; border:1px solid black; height:40px;">
                    ${abecedario[c]}
                 </td>`;
      }
      html += '</tr>';

      html += '</tbody></table>';
      $('#contenedorNicho').html(html);
    }
  });
}





init();