var tabla;
function init(){
    listar_material();
   

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

    $("#chatForm").on("submit", function(e) {
      guardarChat(e); // Llamar a la función para procesar el formulario
    });

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

}
function capturarUbicacion() {
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(
      (position) => {
        const lat = position.coords.latitude;
        const lon = position.coords.longitude;

        document.getElementById('latitud').value = lat;
        document.getElementById('longitud').value = lon;

        obtenerDireccion(lat, lon);
      },
      (error) => {
        Swal.fire("Error", "No se pudo obtener la ubicación.", "error");
      }
    );
  } else {
    Swal.fire("Error", "Tu navegador no soporta geolocalización.", "error");
  }
}

function obtenerDireccion(lat, lon) {
  const apiKey = 'AIzaSyBQLjBXPoSFnn0NSj--qoqQUtH2oSlgboA'; // <-- Reemplaza con tu API Key válida
  const url = `https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lon}&key=${apiKey}`;

  fetch(url)
    .then(response => response.json())
    .then(data => {
      if (data.status === "OK") {
        const address = data.results[1].formatted_address;
        document.getElementById('direccion_capturada').value = address;
      } else {
        document.getElementById('direccion_capturada').value = "Dirección no encontrada";
      }
    })
    .catch(() => {
      document.getElementById('direccion_capturada').value = "Error al obtener dirección";
    });
}

    const vista1 = document.getElementById("vista_1");
    const vista2 = document.getElementById("vista_2");
    const btnSiguiente = document.getElementById("idbutton_siguiente");
    const btnRegresar = document.getElementById("idbutton_regresar");

    // Manejar el botón "Siguiente"
    btnSiguiente.addEventListener("click", function () {
        vista1.style.display = "none"; // Oculta vista_1
        vista2.style.display = "block"; // Muestra vista_2
    });

    // Manejar el botón "Regresar"
    btnRegresar.addEventListener("click", function () {
        vista2.style.display = "none"; // Oculta vista_2
        vista1.style.display = "block"; // Muestra vista_1
    });

    document.getElementById("tipopago").addEventListener("change", function () {
      const tipoPago = this.value;

      if (tipoPago === "3") { // Depósito
          document.getElementById("deposito-fields").style.display = "block";
          document.getElementById("efectivo-fields").style.display = "none";
      } else if (tipoPago === "2") { // Efectivo
          document.getElementById("deposito-fields").style.display = "none";
          document.getElementById("efectivo-fields").style.display = "block";
      } else {
          // Por defecto oculta ambos si no hay selección válida
          document.getElementById("deposito-fields").style.display = "none";
          document.getElementById("efectivo-fields").style.display = "none";
      }
  });



//Función limpiar
function limpiar()
{
	$("#idaveria").val("");
	$("#idcliente").val("");
	$("#direccion").val("");
	$("#referencia").val("");
	$("#distrito").val("");
	$("#celular1").val("");
	$("#celular2").val("");
	$("#detalle_problema").val("");
	$("#observacion").val("");
}
// Función para listar datos
function listar_material() {
    tabla=$("#modalproducto").DataTable({
        "responsive": true,
        "autoWidth": false,
        "ajax": {
            url: '../../ajax/averia.php?op=listar_material',
            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 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
});


// Función para guardar o editar
function guardarChat(e) {
  e.preventDefault(); // Evitar acción predeterminada
  $("#btnChat").prop("disabled", true); // Deshabilitar el botón para evitar múltiples envíos
  var formData = new FormData($("#chatForm")[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/averia.php?op=guardarChat",
        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("Chat Registrado") || datos.includes("Chat Actualizar") ? 'success' : 'error',
            confirmButtonText: 'Aceptar'
          }).then(() => {
            if (datos.includes("Chat Registrado") || datos.includes("Chat Actualizar")) {
              // 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 = "list.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(() => {
            $("#btnChat").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(() => {
        $("#btnChat").prop("disabled", false); // Rehabilitar el botón si se cancela
      });
    }
  }).finally(() => {
    $("#btnChat").prop("disabled", false); // Asegurar que el botón se habilite al final
  });
}
// Función para guardar o editar
function guardaryeditar_fichacontrato(e) {
  e.preventDefault(); // Evitar acción predeterminada
  $("#btnGuardar").prop("disabled", true); // Deshabilitar 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 mientras se envía la solicitud
      Swal.fire({
        title: "Guardando...",
        html: "Por favor, espera mientras se procesan los datos.",
        allowOutsideClick: false,
        backdrop: true,
        didOpen: () => {
          Swal.showLoading();
        }
      });

      // Enviar datos vía AJAX
      $.ajax({
        url: "../../ajax/averia.php?op=guardaryeditar_fichacontrato",
        type: "POST",
        data: formData,
        contentType: false,
        processData: false,
        success: function (datos) {
          Swal.close(); // Cerrar loading
          const exito = datos.includes("Ficha Contrato Registrado") || datos.includes("Ficha Contrato Actualizada");

          swalWithBootstrapButtons.fire({
            title: "Resultado",
            text: datos,
            icon: exito ? "success" : "error",
            confirmButtonText: "Aceptar"
          }).then(() => {
            if (exito) {
              limpiar(); // Asegúrate que esta función esté definida
            }
            window.location.href = "list.php";
          });
        },
        error: function (xhr, status, error) {
          Swal.close();
          console.error("AJAX error:", status, error);
          let mensaje = "Hubo un problema con la solicitud. Intenta nuevamente.";

          // Detectar pérdida de conexión durante el envío
          if (status === "error" && xhr.status === 0) {
            mensaje = "Parece que has perdido la conexión a Internet. Verifica tu red y vuelve a intentarlo.";
          }

          swalWithBootstrapButtons.fire({
            title: "Error",
            text: mensaje,
            icon: "error",
            confirmButtonText: "Aceptar"
          });
        }
      });

    } else if (result.dismiss === Swal.DismissReason.cancel) {
      // Cancelado por el usuario
      swalWithBootstrapButtons.fire({
        title: "Cancelado",
        text: "No se realizaron cambios.",
        icon: "info",
        confirmButtonText: "Aceptar"
      });
    }
  }).finally(() => {
    $("#btnGuardar").prop("disabled", false); // Rehabilitar el botón al finalizar
  });
}


var cont = 0; // Contador de filas
var detalles=0;
function agregarDetalle(idarticulo, codigo, articulo, precio_venta, stocktotal, idmovimiento_materiales, unidad_medida, estadomaterial, idalmacen, filaBoton) {
  
  //console.log("Producto seleccionado:", codigo);
  // Validar que el código no esté repetido
  if (codigoYaExiste(codigo)) {
    Swal.fire({
        icon: 'error',
        title: 'Artículo duplicado',
        text: `El artículo con idmaterial ${idmovimiento_materiales} ya está agregado.`,
        confirmButtonText: 'Aceptar',
        timer: 3000
    });
    return; // Salir de la función para evitar agregar el artículo duplicado
}

// Verificar que los datos sean válidos
   if (idarticulo != "") {
    var subtotal = 1 * precio_venta;
    var disabledInputs = unidad_medida !== 'MTR' ? 'readonly' : '';
    var inicioValue = unidad_medida === 'MTR' ? stocktotal : '';

    // Crear una nueva fila para agregar al detalle
    var fila = `
            <tr class="filas" id="fila${cont}">
            <td>
                <button type="button" class="btn btn-danger btn-xs btn-flat" onclick="eliminarDetalle(${cont})"><i class="fa fa-trash"></i></button> 
            </td>
            <td>
                <input type="hidden" name="idarticulo[]" value="${idarticulo}">${articulo}
                <input type="hidden" name="idmovimiento_materiales[]" value="${idmovimiento_materiales}" readonly>
                <input type="hidden" name="estadomaterial[]" value="${estadomaterial}">
                 <input type="hidden" name="idalmacen[]" value="${idalmacen}">
                <input type="hidden" name="stocktotal[]" id="stocktotal${cont}" value="${stocktotal}">
            </td>
            <td>
               <input type="hidden" name="codigo[]" id="codigo${cont}" value="${codigo}">${codigo}
            </td>
            <td>
                <input class="form-control" type="number" name="inicio[]" id="inicio${cont}" value="${inicioValue}" readonly >
            </td>
            <td>
                <input class="form-control" type="number" name="fin[]" id="fin${cont}" ${unidad_medida === 'MTR' ? '' : 'readonly'} >
            </td>
            <td>
                <input type="number" name="cantidad[]" id="cantidad${cont}" min="1" value="0" class="form-control" ${unidad_medida === 'MTR' ? 'readonly' : ''}  >
            </td>
            <td>
                <input type="number" step="any" name="precio_venta[]" id="precio_venta${cont}" value="${precio_venta}" readonly="" class="form-control">
                <span class="hidden-subtotal" name="subtotal" id="subtotal${cont}">${subtotal}</span>
            </td>
        </tr>
    `;

    // Agregar la fila a la tabla "detalles"
    detalles=detalles+1;
    $('#detalles').append(fila);

      $(document).on("keyup change", "input[name='fin[]']", function () {
        var cont = $(this).attr('id').replace('fin', ''); // Obtener el índice del elemento
        var inicio = parseFloat($("#inicio" + cont).val()) || 0; // Obtener valor de inicio
        var fin = parseFloat($(this).val()) || 0; // Obtener valor de fin
        validarFin(cont, inicio, fin); // Validar y calcular cantidad
        modificarSubtotales();
    });
    
    $(document).on("keyup change", "input[name='cantidad[]']", function () {
        var cont = $(this).attr('id').replace('cantidad', ''); // Obtener el índice del elemento
        var stocktotal = parseFloat($("#stocktotal" + cont).val()) || 0; // Obtener valor del stock total
        validarCantidad(cont, stocktotal); // Validar cantidad ingresada
        modificarSubtotales();
    });
    // Agregar eventos para recalcular subtotales cuando se cambian los valores
    $("#precio_venta" + cont).keyup(modificarSubtotales);
    $("#precio_venta" + cont).change(modificarSubtotales);
    // Incrementar el contador
    cont++;
    // Llamar a la función para actualizar los subtotales
    modificarSubtotales();
    // Eliminar la fila dentro del modal después de agregar al detalle
    $(filaBoton).closest('tr').remove();  // Esto elimina la fila en el modal
} else {
    alert("Error al ingresar el detalle, revisar los datos del artículo");

}
}

function codigoYaExiste(idmovimiento_materiales) {
  let existe = false;
  const codigoCompleto = `${idmovimiento_materiales}`;
  $("input[name='idmovimiento_materiales[]']").each(function () {
      if ($(this).val() === codigoCompleto) {
          existe = true;
      }
  });
  return existe;
}

function validarFin(cont, inicio, fin) {
  if (fin > inicio) {
      Swal.fire({
          icon: 'error',
          title: 'Valor inválido',
          text: `El valor de fin no puede ser mayor que el valor de inicio (${inicio}).`,
          confirmButtonText: 'Aceptar',
          timer: 3000
      });
      $("#fin" + cont).val(inicio); // Restablecer el valor de fin
      fin = inicio;
  }

  var cantidad = inicio - fin; // Calcular cantidad
  $("#cantidad" + cont).val(cantidad); // Actualizar cantidad
}

function validarCantidad(cont, stocktotal) {
  var cantidad = parseFloat($("#cantidad" + cont).val()) || 0; // Evitar NaN

  if (cantidad > stocktotal) {
      Swal.fire({
          icon: 'error',
          title: 'Cantidad excedida',
          text: `La cantidad no puede exceder el stock disponible (${stocktotal}).`,
          confirmButtonText: 'Aceptar',
          timer: 3000
      });
      $("#cantidad" + cont).val(stocktotal); // Restablecer el valor de cantidad
  }
}

function modificarSubtotales() {
  // Lógica para actualizar los subtotales y total
      var cant=document.getElementsByName("cantidad[]");
      var prec=document.getElementsByName("precio_venta[]");
      var sub=document.getElementsByName("subtotal");

      for (var i = 0; i < cant.length; i++) {
        var inpC=cant[i];
        var inpP=prec[i];
        var inpS=sub[i];
        //var inpPorcentajeP=porcenPrecio[i];
        inpS.value=inpC.value*inpP.value;
        //precioVenta[i].value = ((1+inpPorcentajeP.value/100) * inpP.value).toFixed(2);
        document.getElementsByName("subtotal")[i].innerHTML=(inpS.value).toFixed(2);
	}
	calcularTotales();
}

function calcularTotales()
{
      var sub=document.getElementsByName("subtotal");
      var total=0.0;
      for (var i = 0; i < sub.length; i++) {
        total+= document.getElementsByName("subtotal")[i].value;
      }

      $("#total").html("S/. "+total.toFixed(2));
      $("#total_importe").val(total.toFixed(2));
      $("#iicontado_texto").val(total.toFixed(2));
      $("#iitotal_letra").val(total.toFixed(2));
      
      //evaluar();
}

function eliminarDetalle(index) {
  // Eliminar la fila especificada
  $('#fila' + index).remove();
  modificarSubtotales();
  calcularTotales(); // Actualizar los subtotales después de eliminar
}



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

  if (id) {
      // Llamar a la función mostrar del backend
      $.post("../../ajax/averia.php?op=mostrar_contrato", { idaveria: id }, function (data, status) {
          if (status === "success") {
            const response = JSON.parse(data);
            if (response.contratos && response.contratos.length > 0) {
              const contrato = response.contratos[0]; // Primer corte
              let tipoVenta = contrato.tipoventa;
              $("#idaveria").val(contrato.idaveria);
              $("#idpersona").val(contrato.idpersona);
              $("#tipo_trabajo").val(contrato.tipo_trabajo);
              $("#prioridad").val(contrato.prioridad);
              $("#servicio").val(contrato.servicio);
              $("#tecnologia").val(contrato.tecnologia);
              $("#plan").val(contrato.nombre_plan);
              $("#paga").val(contrato.paga);
              $("#modalidad").val(contrato.modalidad);
              $("#distrito").val(contrato.distrito);
              $("#detallecliente").val(contrato.detalle_problema);
              $("#observacion").val(contrato.observaciones);
              $("#referencia").val(contrato.description);
              $("#direccion").val(contrato.address);
              $("#celular1").val(contrato.celular);
              $("#celular2").val(contrato.whatsapp);
              $("#categoriaingreso").val(contrato.idcategoria_ingreso);
              $("#tipotrabajo").val(contrato.idconcepto_ingreso);
              $("#idcontrato").val(contrato.idcontrato);
              $("#descripcion_oficina").val(contrato.descripcion);
              $("#nroacta").val(contrato.nro_acta);
              $("#descripcion_tecnico").val(contrato.descripcion_averia);
              $("#iddireccion").val(contrato.iddireccion);

              $("#idcliente").html('<strong id="idcliente">' + contrato.cliente + '</strong>');
              $("#nroservicio").html('<strong id="nroservicio">NRO SERVICIO: ' + contrato.nroservicio + '</strong>');
              $("#nrocontrato").html('<strong id="nrocontrato">NRO CONTRATO: ' + contrato.nrocontrato + '</strong>');
              $("#fecha_programacion").html('<label id="fecha_programacion"> Fecha: ' + contrato.fecha_programacion + '  </label> ');
              $("#hora_programacion").html('<label id="hora_programacion"> Hora: ' + contrato.hora_programacion + '  </label> ');
              $("#fecha_emision").html('<label id="fecha_emision"> Fecha: ' + contrato.fecha_emision + '  </label> ');
              $("#hora_emision").html('<label id="hora_emision"> Hora: ' + contrato.hora_emision + '  </label> ');

            }else{
              console.error("No se encontraron datos para el contrato.");
            }

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

function letra1() {
  modificarSubtotales();
  const cantidad = document.getElementById('iicantidad_letra').value;
  const total = document.getElementById('iitotal_letra').value;
  const adelanto = document.getElementById('iiadelanto').value;

  if (cantidad > 0) {
      const monto = (Number(total) - Number(adelanto)) / Number(cantidad);
      document.getElementById('iimonto_letra').value = monto.toFixed(2);
  } else {
      alert('La cantidad de letras debe ser mayor a cero');
      document.getElementById('iicantidad_letra').value = '0';
      document.getElementById('iimonto_letra').value = '0';
  }
}

function letra2() {
  modificarSubtotales();
  const total = document.getElementById('iitotal_letra').value;
  const adelanto = document.getElementById('iiadelanto').value;
  const cantidad = document.getElementById('iicantidad_letra').value;
  const monto = (Number(total) - Number(adelanto)) / Number(cantidad);

  document.getElementById('iimonto_letra').value = monto.toFixed(2);
}

function letra3() {
  //modificarSubtotales();
  //const contado = document.getElementById('iicontado_texto').value;
  //document.getElementById('iicostoinstala_contrato').value = contado;
}

function ver1() {
  // Mostrar campos de "Contado"
  document.getElementById('iicontado').style.display = '';
  
  // Ocultar campos de "Cuota"
  document.getElementById('iipartes1').style.display = 'none';
  document.getElementById('iipartes2').style.display = 'none';
  document.getElementById('iipartes3').style.display = 'none';
  document.getElementById('iipartes4').style.display = 'none';
}

function ver2() {
  // Ocultar campos de "Contado"
  document.getElementById('iicontado').style.display = 'none';

  // Mostrar campos de "Cuota"
  document.getElementById('iipartes1').style.display = '';
  document.getElementById('iipartes2').style.display = '';
  document.getElementById('iipartes3').style.display = '';
  document.getElementById('iipartes4').style.display = '';
}


init();