//-------------------FACTURACION-----------------------//
//--------------------------------------------------//


function buscarProducto(){
    let codigo = document.getElementById("codigo").value
    var data_objeto={codigo: codigo}
    document.getElementById("lista").style.display='none'
    document.getElementById("lista2").style.display='none'
    $.ajax({
        type: "POST",
        url: base_url + "Pedidos/buscarProducto",
        data: data_objeto,
        dataType: "json",
        success: function(data){
            if(data=="error"){
                Swal.fire({
                    icon: 'error',
                    title: 'El producto no existe',
                    text: '',
                    timer: 2000
                  })
            }else{
                document.getElementById("nombre_producto").value = data["nombre_producto"]
                document.getElementById("codigoProducto").value = data["codigoProducto"]
                document.getElementById("descripcion").value = data["descripcion"]
                document.getElementById("codigoMedida").value = data["codigoMedida"]
                
                document.getElementById("precio_venta").value = data["precio_venta"]
                document.getElementById("sTotal").value = data["precio_venta"]
                
            }
        }
    })
}

var arrayProductos=[]
var detalles=document.getElementById("detalles")

function cargarProductos(){
    let actEconomica = document.getElementById("actEconomica").value
    let codigoProducto = document.getElementById("codigoProducto").value
    let codigo = document.getElementById("codigo").value
    let nombre_producto = document.getElementById("nombre_producto").value
    let cantProducto = document.getElementById("cantProducto").value
    let unidadMedida = document.getElementById("codigoMedida").value
    let precio_venta = document.getElementById("precio_venta").value
    let descProducto = document.getElementById("descProducto").value
    let sTotal = document.getElementById("sTotal").value
    let ss=parseFloat(sTotal)
    if(codigo=="" || nombre_producto=="" || unidadMedida==""){
        Swal.fire({
            icon: "error",
            title: "Alerta",
            text: "Debes primero cargar el producto",
          });
    }else{
        if(ss>=0.50 ){
            let detallesobj={
                actividadEconomica:actEconomica,
                codigoProductoSin:codigoProducto,
                codigoProducto: codigo,
                descripcion:nombre_producto,
                cantidad:cantProducto,
                unidadMedida: unidadMedida,
                precioUnitario:precio_venta,
                montoDescuento:descProducto,
                subTotal: sTotal,
                numeroSerie: null,
                numeroImei:null
            }
            arrayProductos.push(detallesobj)
            armarPedido()
            document.getElementById("codigo").value=""
            document.getElementById("nombre_producto").value=""
            document.getElementById("cantProducto").value="1"
            document.getElementById("descripcion").value=""
            document.getElementById("precio_venta").value="0.00"
            document.getElementById("descProducto").value="0.00"
            document.getElementById("sTotal").value="0.00"
            
        }else{
            Swal.fire({
                icon: "error",
                title: "Alerta",
                text: "No puedes dar ese tipo de descuentos",
                footer: 'El sub Total debe ser mayor a Bs. 0,50 '
              });
        }
    
    }
}

function armarPedido(){
    detalles.innerHTML = ""
    arrayProductos.forEach((detalle)=>{
        let fila = document.createElement("tr")
        fila.innerHTML = '<td>'+detalle.descripcion+'</td>'
        +'<td>'+detalle.cantidad+'</td>'
        +'<td>'+parseFloat(detalle.precioUnitario).toFixed(2)+'</td>'
        +'<td>'+parseFloat(detalle.montoDescuento).toFixed(2)+'</td>'
        +'<td>'+parseFloat(detalle.subTotal).toFixed(2)+'</td>'
        let tdEliminar = document.createElement("td")
        let botonEliminar = document.createElement("button")
        botonEliminar.classList.add("btn", "btn-danger")
        botonEliminar.innerText="-"
        botonEliminar.onclick= ()=>{
            eliminarProducto(detalle.codigoProducto)
        }
        tdEliminar.appendChild(botonEliminar)
        fila.appendChild(tdEliminar)
        detalles.appendChild(fila)
    })
    calcularstotal()
}

function eliminarProducto(codigo){
    arrayProductos= arrayProductos.filter((detalle)=>{
        if(codigo !=detalle.codigoProducto){
            return detalle
        }
    })
    armarPedido()
}

function calcularstotal(){
    let totalPedido=0
    for(var i=0; i<arrayProductos.length;i++){
        totalPedido+=parseFloat(arrayProductos[i].subTotal)
    }
    console.log(totalPedido)
    document.getElementById("subTotal").value=totalPedido.toFixed(2)
    let descAdicional= parseFloat(document.getElementById("descAdicional").value)
    let giftCard= parseFloat(document.getElementById("montoGiftCard").value)
    document.getElementById("total").value= (totalPedido-descAdicional-giftCard).toFixed(2)


    let cantProducto= document.getElementById("cantProducto").value
    let precio_venta= document.getElementById("precio_venta").value
    let descProducto= document.getElementById("descProducto").value  
    
    
    document.getElementById("sTotal").value=((cantProducto*precio_venta)-descProducto).toFixed(2)
    
    
}

const montoGiftCardInput = document.getElementById('montoGiftCard');
const totalInput = document.getElementById('total');

// Función para actualizar el máximo valor permitido en montoGiftCard
function actualizarMaximoMontoGiftCard() {
    // Obtener el valor del campo total
    let total = parseFloat(totalInput.value);
    
    // Si total no es un número válido, establecer el máximo como 0
    if (isNaN(total)) {
        montoGiftCardInput.setAttribute('max', 0);
    } else {
        // Establecer el máximo valor en montoGiftCard igual al total
        montoGiftCardInput.setAttribute('max', total);
    }
    console.log(total)
}

// Llamar a la función al cargar la página y cuando cambie el valor de total
actualizarMaximoMontoGiftCard();
totalInput.addEventListener('input', actualizarMaximoMontoGiftCard);

function verificarComunicacion(){
    $.ajax({
        type: "POST",
        url: base_url + "Pedidos/verificarComunicacion",
        //cache: false,
        //contentType: false,
        processData: false,
        dataType: "json",
        success: function(data){
            if(data.RespuestaComunicacion.transaccion==true){
                document.getElementById("comunicacionSiat").innerHTML = data.RespuestaComunicacion.mensajesList.descripcion
                document.getElementById("comunicacionSiat").className = "badge bg-success"
                
            }else{
                document.getElementById("comunicacionSiat").innerHTML = "Desconectado"
                document.getElementById("comunicacionSiat").className = "badge bg-secondary"
            }
        }
    })
}

verificarComunicacion()

function cufd(){
    $.ajax({
        type: "POST",
        url: base_url + "Pedidos/cufd",
        //cache: false,
        //contentType: false,
        //processData: false,
        dataType: "json",
        success: function(data){
            //console.log(data)
            if(data.transaccion!= false){
                document.getElementById("cufd").innerHTML = "CUFD Vigente "+ data.fechaVigencia.substring(0,16)
            }else{
                document.getElementById("cufd").innerHTML = "No existe cufd vigente"
            }
        }
    })
}

cufd()

async function getLeyendas() {
    let actividad = document.getElementById("actEconomica").value;
    let url = base_url + "Pedidos/leyendas";
    let formData = new FormData();
    formData.append("actividad", actividad);
    
    try {
        let response = await fetch(url, {
            method: "POST",
            body: formData,
            mode: "cors"
        });

        if (!response.ok) {
            throw new Error('Network response was not ok ' + response.statusText);
        }

        let data = await response.json();
        return data;
    } catch (error) {
        console.error('Error fetching leyendas:', error);
        return [];
    }
}

async function emitirFactura(){

    

    let id_cliente = document.getElementById("id_cliente").value
    let cliente_email = document.getElementById("cliente_email").value
    let numeroFactura = document.getElementById("numeroFactura").value
    let cuf = "";
    let cufd = document.getElementById("cufdvalor").value
    var tzoffset = (new Date()).getTimezoneOffset() * 60000
    let razon_social = document.getElementById("razon_social").value
    let tipopago= document.getElementById('tipoPago').value
    let tipo_documento = document.getElementById("tipo_documento").value
    let documentoid = document.getElementById("documentoid").value
    let complementoid = document.getElementById("complementoid").value
    let total = document.getElementById("total").value
    let descAdicional = document.getElementById("descAdicional").value
    let montoGiftCard = document.getElementById("montoGiftCard").value
    const leyendas = await getLeyendas();
    let leyenda = leyendas[Math.floor(Math.random() * leyendas.length)];
    const numTarjeta= document.getElementById('cardNumber').value
    let numTarjetaFormat= null
    if(numTarjeta!==null && numTarjeta !== ''){
        let numTarjetaSinGuiones = numTarjeta.replace(/-/g, '');
    
        // Agregar los ceros necesarios
        numTarjetaFormat = numTarjetaSinGuiones.slice(0, 4) + '00000000' + numTarjetaSinGuiones.slice(12);
    }
    let usuario = document.getElementById("snick").value

    var factura = []
    factura.push({
        cabecera: {
            nitEmisor: "",
            razonSocialEmisor: "",
            municipio: "",
            telefono: "",
            numeroFactura: numeroFactura,
            cuf: cuf,
            cufd: cufd,
            codigoSucursal: 0,
            direccion: "",
            codigoPuntoVenta: 0,
            fechaEmision: "",
            nombreRazonSocial: razon_social,
            codigoTipoDocumentoIdentidad: tipo_documento,
            numeroDocumento: documentoid,
            complemento: complementoid,
            codigoCliente: documentoid,
            codigoMetodoPago: tipopago,
            numeroTarjeta: numTarjetaFormat,
            montoTotal:  parseFloat(total)+parseFloat(montoGiftCard),
            montoTotalSujetoIva: total,
            codigoMoneda: 1,
            tipoCambio: 1,
            montoTotalMoneda: parseFloat(total)+parseFloat(montoGiftCard),
            montoGiftCard: montoGiftCard,
            descuentoAdicional: descAdicional,
            codigoExcepcion: 0,
            cafc: null,
            leyenda: leyenda,
            usuario: usuario,
            codigoDocumentoSector: 1
        }
    })
    arrayProductos.forEach(function(prod){
        factura.push({ detalle: prod })
    })
    //console.log(factura)
    var swtar=document.getElementById('tipoPago').options[document.getElementById('tipoPago').selectedIndex].text.toLowerCase();
    if(razon_social!=""){
        if(parseFloat(total)>=0.50){
            if(((swtar.includes('tarjeta') && numTarjetaFormat != null && numTarjetaFormat.length==16)
                ||(!swtar.includes('tarjeta') && numTarjetaFormat == null))
            && ((swtar.includes('gift') && 0 < parseFloat(total))
            ||(!swtar.includes('gift') && montoGiftCard == 0))){
                Swal.fire({
                    title: "Cargando",
                    html: "Verificando los datos de la factura",
                    didOpen: () => {
                        Swal.showLoading();
                    },
                    willClose: () => {
                    }
                    }).then((result) => {
                    
                    });
                var datos = {factura}
                $.ajax({
                    type: "POST",
                    url: base_url + "Pedidos/generaFactura",
                    data: {
                        id_cliente: id_cliente,
                        cliente_email: cliente_email,
                        factura: datos
                    },
                    dataType: "json",
                    success: function(data){
                        console.log(data)
                        if(data.mensaje == "VALIDADA"){
                            Swal.fire({
                                icon: 'success',
                                title: 'FACTURA '+data.mensaje,
                                text: ''
                            })
                            window.open(base_url + data.url, '_blank');
                            window.setTimeout(function(){
                                window.location.href = base_url + "Pedidos";
                            }, 2000);
                        }else{
                            console.log("-------------")
                            console.log(data.mensaje);
                            console.log("-------------")
                            console.log(data);
                            Swal.fire({
                                icon: "error",
                                title: "Alerta!!",
                                text: data.mensaje,
                              });
                        }
                    }
                })
            }else{
                if(swtar.includes('tarjeta')){
                    Swal.fire({
                        icon: "error",
                        title: "Alerta",
                        text: "Debes ingresar numero de tarjeta válido: 1111-1111-1111-1111",
                      }); 
                }else{
                    Swal.fire({
                        icon: "error",
                        title: "Alerta",
                        text: "Debes ingresar un monto de GiftCard mayor a 0 y menor o igual que "+total,
                      }); 
                }
            }
            
        }else{
            Swal.fire({
                icon: "error",
                title: "Alerta",
                text: "Debes cargar productos para generar la factura",
              });
        }
    }else{
        Swal.fire({
            icon: "error",
            title: "Alerta",
            text: "Primero debes registrar al Cliente",
          });
    
    }
    
}
async function emitirFacturaSC(){
    
    
    let id_cliente = document.getElementById("id_cliente").value
    let numeroFactura = document.getElementById("numeroFactura").value
    let cliente_email = document.getElementById("cliente_email").value 
    let cuf = "";
    let cufd = document.getElementById("cufdvalor").value
    var tzoffset = (new Date()).getTimezoneOffset() * 60000
    let fechaFactura = (document.getElementById("fechaHora").value)
    let razon_social = document.getElementById("razon_social").value
    let tipopago= document.getElementById('tipoPago').value
    let tipo_documento = document.getElementById("tipo_documento").value
    let documentoid = document.getElementById("documentoid").value
    let complementoid = document.getElementById("complementoid").value
    let total = document.getElementById("total").value
    let descAdicional = document.getElementById("descAdicional").value
    let montoGiftCard = document.getElementById("montoGiftCard").value
    const leyendas = await getLeyendas();
    let leyenda = leyendas[Math.floor(Math.random() * leyendas.length)];
    const numTarjeta= document.getElementById('cardNumber').value
    let numTarjetaFormat= null
    if(numTarjeta!==null && numTarjeta !== ''){
        let numTarjetaSinGuiones = numTarjeta.replace(/-/g, '');
    
        // Agregar los ceros necesarios
        numTarjetaFormat = numTarjetaSinGuiones.slice(0, 4) + '00000000' + numTarjetaSinGuiones.slice(12);
    }
    let usuario = document.getElementById("snick").value
    let cafc = document.getElementById("cafc").value

    var factura = []
    factura.push({
        cabecera: {
            nitEmisor: "",
            razonSocialEmisor: "",
            municipio: "",
            telefono: "",
            numeroFactura: numeroFactura,
            cuf: cuf,
            cufd: cufd,
            codigoSucursal: 0,
            direccion: "",
            codigoPuntoVenta: 0,
            fechaEmision: fechaFactura,
            nombreRazonSocial: razon_social,
            codigoTipoDocumentoIdentidad: tipo_documento,
            numeroDocumento: documentoid,
            complemento: complementoid,
            codigoCliente: documentoid,
            codigoMetodoPago: tipopago,
            numeroTarjeta: numTarjetaFormat,
            montoTotal:  parseFloat(total)+parseFloat(montoGiftCard),
            montoTotalSujetoIva: total,
            codigoMoneda: 1,
            tipoCambio: 1,
            montoTotalMoneda: parseFloat(total)+parseFloat(montoGiftCard),
            montoGiftCard: montoGiftCard,
            descuentoAdicional: descAdicional,
            codigoExcepcion: 0,
            cafc: cafc,
            leyenda: leyenda,
            usuario: usuario,
            codigoDocumentoSector: 1
        }
    })
    arrayProductos.forEach(function(prod){
        factura.push({ detalle: prod })
    })
    //console.log(factura)
    var swtar=document.getElementById('tipoPago').options[document.getElementById('tipoPago').selectedIndex].text.toLowerCase();
    if(razon_social!=""){
        if(parseFloat(total)>=0.50){
            if(((swtar.includes('tarjeta') && numTarjetaFormat != null && numTarjetaFormat.length==16)
                ||(!swtar.includes('tarjeta') && numTarjetaFormat == null))
            && ((swtar.includes('gift') && montoGiftCard > 0 && montoGiftCard <= parseFloat(total))
            ||(!swtar.includes('gift') && montoGiftCard == 0))){
                var datos = {factura}
                Swal.fire({
                    title: "Cargando",
                    html: "Verificando los datos de la factura",
                    didOpen: () => {
                        Swal.showLoading();
                    },
                    willClose: () => {
                    }
                    }).then((result) => {
                    
                    });
        
                $.ajax({
                    type: "POST",
                    url: base_url + "Pedidos/generaFacturaSC",
                    data: {
                        id_cliente: id_cliente,
                        cliente_email: cliente_email,
                        cafc: cafc,
                        factura: datos
                    },
                    dataType: "json",
                    success: function(data){
                        console.log(data)
                        if(data == "VALIDADA" || data == "GUARDADA"){
                            Swal.fire({
                                icon: 'success',
                                title: 'FACTURA '+data,
                                text: ''
                            })
                            window.setTimeout(function(){
                                window.location.href = base_url + "Pedidos";
                            }, 2000);
                        }
                    }
                })
            }else{
                if(swtar.includes('tarjeta')){
                    Swal.fire({
                        icon: "error",
                        title: "Alerta",
                        text: "Debes ingresar numero de tarjeta válido: 1111-1111-1111-1111",
                      }); 
                }else{
                    Swal.fire({
                        icon: "error",
                        title: "Alerta",
                        text: "Debes ingresar un monto de GiftCard mayor a 0 y menor o igual que "+total,
                      }); 
                }
            }
            
        }else{
            Swal.fire({
                icon: "error",
                title: "Alerta",
                text: "Debes cargar productos para generar la factura",
              });
        }
    }else{
        Swal.fire({
            icon: "error",
            title: "Alerta",
            text: "Primero debes registrar al Cliente",
          });
    
    }

    
    
}








function emitirFactura500(){
    for (let i = 0; i < 500; i++) {
        let id_cliente = document.getElementById("id_cliente").value
        var nroFactura =parseInt(document.getElementById("numeroFactura").value, 10);
        let numeroFactura = (nroFactura+i).toString();
        let cuf = "";
        let cufd = document.getElementById("cufdvalor").value
        var tzoffset = (new Date()).getTimezoneOffset() * 60000
        let fechaFactura = (new Date(Date.now() - tzoffset)).toISOString().slice(0,-1)
        let razon_social = document.getElementById("razon_social").value
        let tipo_documento = document.getElementById("tipo_documento").value
        let documentoid = document.getElementById("documentoid").value
        let complementoid = document.getElementById("complementoid").value
        let total = document.getElementById("total").value
        let descAdicional = document.getElementById("descAdicional").value
        const leyendas= ["Ley N° 453: Está prohibido importar, distribuir o comercializar productos expirados o prontos a expirar.",
                        "Ley N° 453: Los alimentos declarados de primera necesidad deben ser suministrados de manera adecuada, oportuna, continua y a precio justo.",
                        "Ley N° 453: Tienes derecho a recibir información sobre las características y contenidos de los productos que consumes.",
                        "Ley N° 453: Tienes derecho a un trato equitativo sin discriminación en la oferta de productos.",
                        "Ley N° 453: Está prohibido importar, distribuir o comercializar productos prohibidos o retirados en el país de origen por atentar a la integridad física y a la salud.",
                        "Ley N° 453: El proveedor deberá entregar el producto en las modalidades y términos ofertados o convenidos.",
                        "Ley N° 453: En caso de incumplimiento a lo ofertado o convenido, el proveedor debe reparar o sustituir el producto..",
                        "Ley N° 453: Los servicios deben suministrarse en condiciones de inocuidad, calidad y seguridad."]
        let leyenda = leyendas[Math.floor(Math.random() * 8)]
        let usuario = document.getElementById("snick").value

        var factura = []
        factura.push({
            cabecera: {
                nitEmisor: "2314273018",
                razonSocialEmisor: "FLORES ELIZABETH MARGA",
                municipio: "La Paz",
                telefono: "72506644",
                numeroFactura: numeroFactura,
                cuf: cuf,
                cufd: cufd,
                codigoSucursal: 0,
                direccion: "AVENIDA BALLIVIAN N° 1689A ZONA CALACOTO",
                codigoPuntoVenta: 0,
                fechaEmision: fechaFactura,
                nombreRazonSocial: razon_social,
                codigoTipoDocumentoIdentidad: tipo_documento,
                numeroDocumento: documentoid,
                complemento: complementoid,
                codigoCliente: documentoid,
                codigoMetodoPago: 1,
                numeroTarjeta: null,
                montoTotal: total,
                montoTotalSujetoIva: total,
                codigoMoneda: 1,
                tipoCambio: 1,
                montoTotalMoneda: total,
                montoGiftCard: 0,
                descuentoAdicional: descAdicional,
                codigoExcepcion: 0,
                cafc: null,
                leyenda: leyenda,
                usuario: usuario,
                codigoDocumentoSector: 1
            }
        })
        arrayProductos.forEach(function(prod){
            factura.push({ detalle: prod })
        })
        //console.log(factura)
        var datos = {factura}
        $.ajax({
            type: "POST",
            url: base_url + "Pedidos/generaFactura500",
            data: {
                id_cliente: id_cliente,
                factura: datos
            },
            dataType: "json",
            success: function(data){
                console.log(data)
                if(data == "VALIDADA"){
                    Swal.fire({
                        icon: 'success',
                        title: 'FACTURA '+data,
                        text: ''
                    })
                    window.setTimeout(function(){
                        window.location.href = base_url + "Pedidos";
                    }, 2000);
                }
            }
        })
    }
    
}



function validarFacturas(){
    var tzoffset = (new Date()).getTimezoneOffset() * 60000
    let fechaFactura = (new Date(Date.now() - tzoffset)).toISOString().slice(0,-1)
    Swal.fire({
                title: "Cargando",
                html: "Enviando paquete de facturas para validar...",
                didOpen: () => {
                    Swal.showLoading();
                },
                willClose: () => {
                }
                }).then((result) => {
                
                });
    $.ajax({
        type: "POST",
        url: base_url + "Avanzado/validarFacturas/"+document.getElementById("id_evento").value,
        data: {
            time: fechaFactura
        },
        dataType: "json",
        success: function(data){
            console.log(data)
            tblPedidosSC.ajax.reload()
            if(data == "PENDIENTE"){
                Swal.fire({
                    icon: 'success',
                    title: 'FACTURAS ESTADO: '+data,
                    text: ''
                })
                window.setTimeout(function(){
                    window.location.href = base_url + "Avanzado/facturas_pendientes";
                }, 2000);
            }
        }
    })
    
    
}


function comprobarEstado(){
    var tzoffset = (new Date()).getTimezoneOffset() * 60000
    let fechaFactura = (new Date(Date.now() - tzoffset)).toISOString().slice(0,-1)
    Swal.fire({
                title: "Cargando",
                html: "Verificando estado de facturas enviadas...",
                didOpen: () => {
                    Swal.showLoading();
                },
                willClose: () => {
                }
                }).then((result) => {
                
                });
    $.ajax({
        type: "POST",
        url: base_url + "Avanzado/comprobarEstado/"+document.getElementById("codigoRecepcion").value,
        data: {
            time: fechaFactura
        },
        dataType: "json",
        success: function(data){
            console.log(data)
            tblPedidosSCP.ajax.reload()
            if(data == "VALIDADA"){
                Swal.fire({
                    icon: 'success',
                    title: 'FACTURAS ESTADO: '+data,
                    text: ''
                })
                window.setTimeout(function(){
                    window.location.href = base_url + "Pedidos";
                }, 2000);
            }else{
                Swal.fire(
                            'Mensaje!',
                            data,
                            'error'
                          )
            }
        }
    })
    
    
}