document.addEventListener("DOMContentLoaded", function() {
    // Retrieve the rowData from the session
    var rowData = sessionStorage.getItem('rowData');
    var rowDataObj = JSON.parse(rowData);
    // Log the rowDataObj to the console
    console.log(rowDataObj);
    
    //////Variables para el cálulo///
    const tasa = rowDataObj["Tasa"];
    //localStorage.setItem('tasa', tasa);
    const c = rowDataObj["Comision"];
    //localStorage.setItem('c', com);
    const monto= rowDataObj["Validaci\u00f3n Monto Solicitado"];
    
    //localStorage.setItem('monto', monto);
    const peri = parseFloat(rowDataObj["Periodicidad"]);
   localStorage.setItem('periodo', peri);
    const plzo= parseFloat(rowDataObj["Plazo"]);
    //localStorage.setItem('plazo', plzo);
    document.getElementById("plazodecredito").textContent = plzo/30 + " meses";
    const fechai= rowDataObj["Fecha de inicio"];
    //localStorage.setItem('fechai', fechai);
    
    const options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }; // Options for formatting the date
    const interestic = parseFloat(tasa);
  console.log(interestic)
  const com = parseFloat(c);
  console.log(com)
  const amount = parseFloat(monto.replace(/[\$,]/g, ""));
  document.getElementById("montominis").textContent = `$${amount.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")}`;
  console.log(amount)
  const periodo = parseFloat(peri);
  console.log("Periodo:",periodo)
  const plazo = parseFloat(plzo);
  console.log("Plazo:",plazo)

  var partesFecha = fechai.split("/");

// Formar la fecha en formato "aaaa-mm-dd"
var fecha_inicio = partesFecha[2] + "/" + partesFecha[1].padStart(2, '0') + "/" + partesFecha[0].padStart(2, '0');

  const n = Math.floor(plazo / periodo); // Redondear hacia abajo
  console.log(n)
  localStorage.setItem('numperiodos', n);
  
  console.log (fecha_inicio)
  const amountt = 1 * amount;
  //const date = new Date();
  let comision = com * 0.01;
  let interes = interestic * 0.01 * (periodo / 360);
  console.log(interes);
  let payment = amountt * (1+comision) * interes / (1 - Math.pow(1 + interes, -n));
  
  // Utilizar el valor redondeado de n en los cálculos
  payment = amountt * (1 + comision) * interes / (1 - Math.pow(1 + interes, -n));
  let d = payment*n
  let cost = (((d/amountt-1)*100)*12)/((plazo/30)*1.16)
  
 // Vectores que utilizaremos en el loop que genera la tabla
    var hoy = new Date(fecha_inicio.replace(/-/g, '\/'));
    var fecha = [hoy.toLocaleDateString('es-ES', options)];
    var inicio = [hoy.toLocaleDateString('es-ES', options)];
  
  var periodos = [0];
  
  // Creemos una función que nos permita sumar periodos
  
  var numOfDays = periodo; // Número de días a sumar, puedes cambiarlo a lo que necesites.

  function addDays(numOfDays, date) {
    date.setDate(date.getDate() + numOfDays);
    return date.toLocaleDateString('es-ES', options);
  }
  
  function getNextDates(fechaActual, cantidadPagos) {
    let fechas = [];
    
    // Insert the initial fechaActual as the first element
    fechas.unshift(new Date(fechaActual)); // Ensure it's a copy of fechaActual
    
    for (let i = 0; i < cantidadPagos; i++) {
        let dia5 = new Date(fechaActual.getFullYear(), fechaActual.getMonth(), 5); // Change to 5th
        let dia20 = new Date(fechaActual.getFullYear(), fechaActual.getMonth(), 20);
        
        if (fechaActual.getDate() < 5) {
            fechas.push(dia5);
        } else if (fechaActual.getDate() < 20) {
            fechas.push(dia20);
        } else {
            // Move to the next month's 5th day
            let nextMonth5 = new Date(fechaActual.getFullYear(), fechaActual.getMonth() + 1, 5);
            fechas.push(nextMonth5);
        }
        
        // Update the current date for the next iteration
        fechaActual = new Date(fechaActual.getFullYear(), fechaActual.getMonth(), fechaActual.getDate());
        if (fechaActual.getDate() < 20) {
            fechaActual.setDate(20); // Move to the 20th of the current month
        } else {
            fechaActual = new Date(fechaActual.getFullYear(), fechaActual.getMonth() + 1, 5); // Move to the next month's 5th
        }
    }
    
    return fechas;
}




// Example usage:

const fechasDePago = getNextDates(hoy, n+1);
console.log(fechasDePago);



function findNearestDate(dates) {
    // Get the current date
    var currentDate = new Date();
    
    // Initialize variables to store the nearest date and its difference
    var nearestDate = null;
    var nearestDifference = Infinity;
    
    // Flag to check if all dates have passed
    var allDatesPassed = true;
    
    // Loop through each date in the array
    for (var i = 0; i < dates.length; i++) {
        // Convert the date string to a Date object
        var date = new Date(dates[i]);
        
        // Calculate the difference between the current date and the date in the array
        var difference = date - currentDate;
        
        // If the difference is negative, it means the date is in the past, so we ignore it
        if (difference < 0) {
            continue;
        }
        
        // If at least one date hasn't passed, update the flag
        allDatesPassed = false;
        
        // If the current difference is smaller than the previous smallest difference, update nearest date
        if (difference < nearestDifference) {
            nearestDifference = difference;
            nearestDate = date;
        }
    }
    
    // If all dates have passed, return the last date in the array
    if (allDatesPassed) {
        return new Date(dates[dates.length - 1]);
    }
    
    // Return the nearest date
    return nearestDate;
}

// Example usage
var nearestDate = findNearestDate(fechasDePago.slice(1));
console.log("Nearest upcoming date:", nearestDate);




  // Un loopsillo de periodos y fechas. Lo separamos por obvias razones
  for (var i = 0; i <= n; i++) {
    periodos[i + 1] = periodos[i] + 1;
    fecha[i + 1] = addDays(numOfDays * (i + 1), new Date(hoy)); // Sumamos el total de días acumulados hasta el momento
  }
  fecha[0] = addDays(numOfDays * (0), new Date(hoy)); // Sumamos el total de días acumulados hasta el momento
  
  amort = [0]
  int = [0]
  saldo_inicial = [amountt*(1+comision)];
  saldo_final = [amountt*(1+comision)];
  pago = [0]
  iva = [0]
  
  function contarFechasPasadas(fechas) {
    let fechaActual = new Date();
    let contador = 0;

    for (let i = 0; i < fechas.length; i++) {
        let fecha = new Date(fechas[i]);
        if (fecha < fechaActual) {
            contador++;
        }
    }

    return contador;
}


let fechasPasadas = parseFloat(contarFechasPasadas(fechasDePago.slice(1)));
console.log("Número de fechas pasadas: " + fechasPasadas);
localStorage.setItem( 'fechasCounter', fechasPasadas );


//Loop formato de fechas
for (var i = 0; i <= n; i++) {
    fechasDePago[i] = fechasDePago[i].toLocaleDateString('es-ES', options)
  }
fechasDePago[0] = inicio;
  //Nuestro loop con ecuaciones en diferencia
  for (i = 0; i<=n; i++){
    pago[i+1] = payment;
    int[i+1] = saldo_final[i]*interes/1.16;
    iva[i+1] = int[i+1]*0.16;
    amort[i+1] = payment - int[i+1] - iva[i+1];
    saldo_inicial[i+1] = saldo_final[i] + int[i+1] + iva[i+1];
    saldo_final[i+1] = saldo_final[i] - amort[i+1];      
      }
  //Otro loopsillo para añadir formato:    
  for (i=0; i<=n; i++){
    saldo_inicial[i+1] = saldo_inicial[i+1].toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
    saldo_final[i+1] = saldo_final[i+1].toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
    int[i+1] = int[i+1].toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
    iva[i+1]  = iva[i+1].toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
    amort[i+1]  = amort[i+1].toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
    pago[i+1] = pago[i+1].toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); 
        }    
  saldo_inicial[0] = saldo_inicial[0].toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
  saldo_final[0] = saldo_final[0].toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
  iva[0]=iva[0].toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")
  int[0]=int[0].toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")
  pago[0]=pago[0].toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")
  amort[0]=amort[0].toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")
  

  //Ahora crearemos una tabla en HTML con la anterior información
    var headers = ["Periodo",
    "Saldo Inicial", "Interés" , "I.V.A.",  "Amortización", "Pago parcial", 
    "Saldo Final", "Fecha"];
    var table = document.createElement("TABLE");  //makes a table element for the page
        
    for(var i = 0; i <= n; i++) {
        var row = table.insertRow(i);                       
        row.insertCell(0).innerHTML = periodos[i];
        row.insertCell(1).innerHTML = `$${saldo_inicial[i]}`;
        row.insertCell(2).innerHTML = `$${int[i]}`;
        row.insertCell(3).innerHTML = `$${iva[i]}`;
        row.insertCell(4).innerHTML = `$${amort[i]}`; 
        row.insertCell(5).innerHTML = `$${pago[i]}`;
        row.insertCell(6).innerHTML = `$${saldo_final[i]}`; 
        row.insertCell(7).innerHTML = fechasDePago[i];       
    }

    var header = table.createTHead();
    var headerRow = header.insertRow(0);
    for(var i = 0; i < headers.length; i++) {
        headerRow.insertCell(i).innerHTML = headers[i];
    }
    
    const myData = table
    console.log(myData.innerHTML)
    document.getElementById('tabla').innerHTML = myData.innerHTML;      
    
    var periodicidad; // Declare the variable outside the if-else chain

if (periodo == 7) {
    periodicidad = "Semanal";
} else if (periodo == 30) {
    periodicidad = "Mensual";
} else if (periodo == 15) {
    periodicidad = "Quincenal";
} else if (periodo == 14) {
    periodicidad = "Catorcenal";
} else {
    periodicidad = "Otro"; // Handle the case when none of the conditions are met
}

console.log(periodicidad);
document.getElementById("periodicidad").textContent = periodicidad;


    
    // Unpack each variable
    const nombrePF = rowDataObj["Nombre completo"];
    document.getElementById("nombre").textContent = nombrePF.replace(/\,/g, ' ');
    ///Crear ID único 
    function generateID(fullName) {
    // Split the full name into separate words
    var words = fullName.split(" ");
    var id = "";

    // Iterate through each word
    for (var i = 0; i < words.length; i++) {
            // Take the first letter of each word and add it to the ID
            id += words[i].charAt(0);
        }
    
        // Return the first three characters of the ID (if the name has less than 3 words)
        return id.slice(0, 3).toUpperCase();
    }
    
    const idinciales = generateID(nombrePF.replace(/\,/g, ' '))
    const idcounter = rowDataObj["IDcounter"];
    const idunique = idinciales + idcounter
    console.log("ID Unico", idunique)
    document.getElementById("nocontrato").textContent = idunique;
    const id = rowDataObj["RFC"];
    document.getElementById("id").textContent = id;
    const parcialidad = payment.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
    document.getElementById("parcialidad").textContent = `$${parcialidad}`;
    //const fechai = rowDataObj["Fecha de inicio"];
    var partesFecha = fechai.split("/");

    // Formar la fecha en formato "aaaa-mm-dd"
    var fecha_inicio = partesFecha[2] + "-" + partesFecha[1].padStart(2, '0') + "-" + partesFecha[0].padStart(2, '0');
    var formattedfecha_inicio = new Date(fecha_inicio.replace(/-/g, '\/'));
    var fechaini = [formattedfecha_inicio.toLocaleDateString('es-ES', options)];
    document.getElementById("fecha_inicio").textContent = fechaini;
    
    const id_form = rowDataObj["id"];
    localStorage.setItem('id_form', id_form)
    
    
    //const hoy = new Date();
    


// Llamada a la función y cálculo de la diferencia

let fechaDeHoy = new Date();

let fechaSigPago = nearestDate.toLocaleDateString('es-ES', options)
document.getElementById("fechaSigPago").textContent = fechaSigPago;

let diferenciaEnMilisegundos = nearestDate - fechaDeHoy;
let diferenciaEnDias = Math.floor(diferenciaEnMilisegundos / (1000 * 60 * 60 * 24));
document.getElementById("countDays").textContent = diferenciaEnDias + " días para la fecha de pago";

    /////Línea de crédito//////
    const antgdd = rowDataObj["Antigüedad"];
    const salario = parseFloat(rowDataObj["Salario"]);
    const edad = rowDataObj["Edad exacta"];
    
    function between(value, min, max) {
    return value >= min && value <= max;
    }
    
    let porclineaMax;
    if (antgdd <= 5) {
        porclineaMax = 0.30;
    } else if (between(antgdd, 6, 11)) {
        porclineaMax = 0.70;
    } else if (between(edad, 18, 33) && antgdd >= 12) {
        porclineaMax = 1;
    } else if (between(edad, 33, 60) && antgdd >= 12) {
        porclineaMax = 1.5;
    } else if (edad > 60 && antgdd >= 12) {
        porclineaMax = 1;
    }

    const lineaMax = salario*porclineaMax;
    document.getElementById("linea_max").textContent = `$${lineaMax.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")}` ;
    //const amount= parseFloat(rowDataObj["Monto"].replace("$", ""));
    //console.log(amount)
    document.getElementById("amount_actual").textContent = `$${amount.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")}` ;
    const amount_disponible = lineaMax-amount
    console.log(amount_disponible)
    document.getElementById("amount_dispo").textContent = `$${amount_disponible.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")}`
    
  function actualizarBarraDeProgreso() {
    // Calcular el porcentaje de progreso
    var progreso = (fechasPasadas/n) * 100;

    // Actualizar el valor de la barra de progreso
    var progressBar = document.getElementById("progressBar");
    progressBar.style.width = progreso + "%";
    progressBar.setAttribute("aria-valuenow", progreso);
    progressBar.textContent = progreso.toFixed() + "%";
  }
  // Llamar a la función para actualizar la barra de progreso inicialmente y cada vez que se actualicen las variables
  actualizarBarraDeProgreso(); 
  
  
   document.getElementById('fechasCounter').textContent  = fechasPasadas
  document.querySelector('#parcialidades').innerHTML = "/" + n
     const fechaVenci= fechasDePago[n]
 document.getElementById('fecha_final').textContent  = fechaVenci
 const fechasCounter = parseFloat(localStorage.getItem('fechasCounter'));
  
    const contratosigned = rowDataObj["Contrato firmado"];
    console.log("Contrato",contratosigned[0])
    signed= contratosigned[0];
    
        // Hide header and button if signed is undefined
    if (contratosigned.length === 0) {
        document.getElementById("headercontract").style.display = "none";
        document.getElementById("signedcontract").style.display = "none";
        document.getElementById("statact").style.display = "none";
    } else {
        // Set download URL for the button if URL is not null
        document.getElementById("signedcontract").addEventListener("click", function() {
            var link = document.createElement("a");
            link.href = signed;
            link.download = "contrato_firmado.pdf"; // Change filename accordingly
            document.body.appendChild(link);
            link.click();
            document.body.removeChild(link);
        });
        document.getElementById("statinact").style.display = "none";
    }
    
    const databank = rowDataObj["Carátula de Estado de Cuenta Bancario para dispersión"]
    document.getElementById('infobank').addEventListener("click", function() {
            var linkb = document.createElement("a");
            linkb.href = databank;
            linkb.download = "infobank.pdf"; // Change filename accordingly
            document.body.appendChild(linkb);
            linkb.click();
            document.body.removeChild(linkb);
        });
        
    const idEnv = rowDataObj["id"];
    localStorage.setItem( 'idEnv', idEnv);
    localStorage.setItem( 'com', c);
    localStorage.setItem( 'tic', interestic);
    localStorage.setItem( 'salario', amount_disponible);
     
    /*///Datos para solicitar linea disponible/////////
    var partsNombre = nombrePF.split(",");
    console.log(partsNombre)

    // Assign the values to separate variables
    var nombres = partsNombre[0];
    console.log(nombres)
    var apellido1= partsNombre[1];
    console.log(apellido1)
    var apellido2= partsNombre[2];
    console.log(apellido2)
    
    // Now you can use variable1 and variable2 as needed
    const numtel = rowDataObj["Número de teléfono"];
    var partsNumero = numtel.split(",");
  
    var codigoArea = partsNumero[0];
    var numeroTel= partsNumero[1];
    const mail = rowDataObj["Email"];
    const domicilio = rowDataObj["Domicilio"];
    var partsDomicilio = domicilio.split(",");
    console.log(partsDomicilio)
    var calleNum = partsDomicilio[0];
    var colonia= partsDomicilio[1];
    var municipio= partsDomicilio[2];
    var cp= partsDomicilio[3];
    var estado= partsDomicilio[4];
    const ed = rowDataObj["Edad"];
    const emp = rowDataObj["Empresa"];
    const nom = rowDataObj["Ingreso mensual de nómina"];
    const estciv = rowDataObj["Estado Civil"];
    const depecon = rowDataObj["Dependientes económicos"];
    const sex = rowDataObj["\u00BFCuál es su sexo?"];
    const auto = rowDataObj["\u00BFCuenta con auto propio?"];
    const vivienda = rowDataObj["Responda las siguientes preguntas sobre<strong> </strong>su vivienda"];
    const tiempvivienda = rowDataObj["Tiempo en la actual vivienda"];
    const datosEmpleo = rowDataObj["Datos de empleo"];
    var partsEmpleo = datosEmpleo.split(",");
    console.log(partsDomicilio)
    var puesto = partsEmpleo[0];
    var numempleado= partsEmpleo[1];
    
    const trabajoActual = rowDataObj["Su trabajo actual es"];
    const tiempTrabajo = rowDataObj["Tiempo en su trabajo actual:"];
    const contratoLaboral = rowDataObj["Su contrato laboral es:"];    
    localStorage.setItem( 'nombres', nombres);
    localStorage.setItem( 'apellido1', apellido1);
    localStorage.setItem( 'apellido2', apellido2);
    localStorage.setItem( 'codigoArea', codigoArea);
    localStorage.setItem( 'numTel', numeroTel);
    localStorage.setItem( 'email', mail);
    localStorage.setItem( 'calleNum', calleNum);
    localStorage.setItem( 'colonia', colonia);
    localStorage.setItem( 'municipio', municipio);
    localStorage.setItem( 'cp', cp);
    localStorage.setItem( 'estado', estado);
    localStorage.setItem( 'rfc', id);
    localStorage.setItem( 'edad', edad);
    
    localStorage.setItem( 'antgdd', antgdd);
    localStorage.setItem( 'empresa', emp);
    
    localStorage.setItem( 'edadinter', ed);
    localStorage.setItem( 'estciv', estciv);
    localStorage.setItem( 'sex', sex);
    localStorage.setItem( 'depec', depecon);
    localStorage.setItem( 'auto', auto);
    localStorage.setItem( 'vivienda', vivienda);
    localStorage.setItem( 'tiemvivienda', tiempvivienda);
    localStorage.setItem( 'puesto', puesto);
    localStorage.setItem( 'numempleado', numempleado);
    localStorage.setItem( 'trabajoActual', trabajoActual);
    localStorage.setItem( 'tiempTrabajo', tiempTrabajo );
    localStorage.setItem( 'contratoLaboral', contratoLaboral);*/
    
  
    
});