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///
        //////Variables para el c谩lulo///
    const interest_ic = parseFloat(rowDataObj["tic"]);
    const amount= parseFloat(rowDataObj["Monto a Aportar"].replace(/,/g, ''));
    const modalidad= rowDataObj["Modalidad de inversión"];
    const amount_inicial= parseFloat(rowDataObj["Monto Inicial a Aportar"].replace(/,/g, ''));
    const months= parseFloat(rowDataObj["Plazo de aportaciones"]);
    const fecha_inicio= rowDataObj["Fecha de inicio"];

    const interestic = interest_ic*0.01/12;
    //const interestcv = interest_cv*0.01/12;
    const amountt = 1*amount;
    
    let amounttotal;
    let pagostotal;
    let capital_ic;
    let moda;
    
    if(modalidad == "Aportación única"){
        amounttotal = 1*amount
        pagostotal = 1*amount
        capital_ic = 0
        moda = 1
    } else if(modalidad == "Aportación mensual"){
        amounttotal = 1*amount
        pagostotal = 1*amount*months
        capital_ic = amountt
        moda = 2
    }  else if(modalidad == "Mezcla de ambas"){
        amounttotal = 1*(amount+amount_inicial)
        pagostotal = 1*((amount*months)+amount_inicial)
        capital_ic = amountt
        moda = 3
        
    }
    
    console.log("Donacion mensual IC:", capital_ic)
    const acciones = amount/1000;


    const interest = interest_ic*0.01/12;
    const plazo = months;
    
    const m = months;

// Vectores que utilizaremos en el loop que genera la tabla
  var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
  var hoy = new Date(fecha_inicio.replace(/-/g, '\/'));
  const inicio = [hoy.toLocaleDateString('es-ES', options)];
  var fecha = [hoy];
  var periodos = [0];
  
  // Creemos una función que nos permita sumar periodos
  var numOfMonth = 1; // Número de días a sumar, puedes cambiarlo a lo que necesites.
  console.log(numOfMonth)
  
  
  //Function que solo añade meses a la fecha
  function addMonths(originalDate, monthsToAdd) {
  // Make a copy of the original date to avoid modifying it directly
  const newDate = new Date(originalDate);

  // Calculate the new month
  const currentMonth = newDate.getMonth();
  newDate.setMonth(currentMonth + monthsToAdd);

  return newDate;
}


  // Un loopsillo de periodos y fechas. Lo separamos por obvias razones
  for (var i = 0; i < m; i++) {
    periodos[i + 1] = periodos[i] + 1;
    fecha[i + 1] = addMonths(hoy, numOfMonth*[i+1]); // Sumamos el total de días acumulados hasta el momento
  }
  fecha[0] = addMonths(hoy, numOfMonth* (0)); // Sumamos el total de días acumulados hasta el momento


    

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;
    
    // 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 the current difference is smaller than the previous smallest difference, update nearest date
        if (difference < nearestDifference) {
            nearestDifference = difference;
            nearestDate = date;
        }
    }
    
    // Return the nearest date
    return nearestDate;
}

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

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(fecha));
console.log("Número de fechas pasadas: " + fechasPasadas);
localStorage.setItem( 'fechasCounter', fechasPasadas );

const numfila = fechasPasadas
console.log("Periodo en que vamos:", numfila)
const numerador = parseFloat(contarFechasPasadas(fecha.slice(1)))

 for (var i = 0; i <= m; i++) {
    fecha[i] = fecha[i].toLocaleDateString('es-ES', options)
  }   
 

let saldoord= [amounttotal];
let pagop = [0];
let interes = [0];
   
for (i = 0; i<=m; i++){
saldoord[i+1] = saldoord[i]*(1+interestic) + capital_ic;
interes[i+1] = saldoord[i]*(interestic); 
    }
    
 var pagosmensuales = pagop.slice(1, -1)
 let result = 0;
for (let i = 0; i < pagosmensuales.length; i++) {
  result += pagosmensuales[i];
}
console.log(result)
Ganancia = saldoord[m-1]+interes[m] - pagostotal

let pagoex = [];

if (moda === 1) {
    for (let i = 1; i <= m; i++) {
        pagoex.push(0);
    }
} else if (moda >= 2) {
    for (let i = 1; i <= m; i++) {
        pagoex.push(-amountt);
    }
}
console.log(pagoex)
pagoex[0]= -amounttotal
pagoex[m] = saldoord[m-1]+interes[m]

saldoord[m] = 0;

for (i=1; i<=m; i++){
  saldoord[i] = saldoord[i].toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
  interes[i] = interes[i].toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
  pagoex[i] = pagoex[i].toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
      }
  saldoord[0] = saldoord[0].toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
  pagoex[0] = pagoex[0].toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
    


var headers = ["Periodo", "Pagos", "Rendimiento", "Saldo Total", 
"Fecha"];
var table = document.createElement("TABLE");  //makes a table element for the page
    
for(var i = 0; i <= m; i++) {
    var row = table.insertRow(i);                       
    row.insertCell(0).innerHTML = periodos[i];
    row.insertCell(1).innerHTML = `$${pagoex[i]}`;
    row.insertCell(2).innerHTML = `$${interes[i]}`; 
    row.insertCell(3).innerHTML = `$${saldoord[i]}`;
    row.insertCell(4).innerHTML = fecha[i];
}



var header = table.createTHead();
var headerRow = header.insertRow(0);
for(var i = 0; i < headers.length; i++) {
    headerRow.insertCell(i).innerHTML = headers[i];
}

//document.body.append(table);
//var myData = [header.innerHTML, row.innerHTML]
const myData = table
console.log(myData.innerHTML)
localStorage.setItem( 'tabla', myData.innerHTML );document.getElementById('tabla').innerHTML = myData.innerHTML;


KmasR = Ganancia + result + pagostotal
rendimientostotal = Ganancia.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
capitalrendimiento = KmasR.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
document.getElementById("totalrendi").textContent = `$${rendimientostotal}`;
document.getElementById("kmasr").textContent = `$${capitalrendimiento}`;

let invactual
if(moda == 1){
        invactual =amount
    } else if(moda== 2){
        invactual = amount*(numfila)
    }  else if(moda == 3){
        invactual = amounttotal*(numfila)
    }

const invnow= invactual.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
const yieldactual = parseFloat(saldoord[numfila].replace(/,/g, ''))
console.log("rendimeinto actual:", yieldactual)
saldonow = yieldactual.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
document.querySelector('#invactual').innerHTML = `$${invnow}`;

suma_pagos = pagostotal.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
document.getElementById("totalinversion").textContent = `$${suma_pagos}`;
document.getElementById("saldoactual").textContent = `$${saldonow}`;
document.getElementById("plazodeinv").textContent = months + " meses";
document.getElementById("modalidadinv").textContent = modalidad;


const pagosiguiente = pagoex[numfila]
document.querySelector('#sigpago').innerHTML = `$${pagosiguiente}`

    
    // Unpack each variable
    const nombrePF = rowDataObj["Nombre completo"];
    document.getElementById("nombre").textContent = nombrePF.replace(/,/g, '');
    const id = rowDataObj["RFC"];
    document.getElementById("id").textContent = id;
    document.getElementById("fecha_inicio").textContent = inicio;
  



// Example usage
const n = months
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";

   fechahoy = new Date()
  document.getElementById('fechahoy').textContent  = fechahoy.toLocaleDateString('es-ES', options)
  
  function actualizarBarraDeProgreso() {
    // Calcular el porcentaje de progreso
    var progreso = (numerador/m) * 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  = numerador
  document.querySelector('#parcialidades').innerHTML = "/" + n
     const fechaVenci= fecha[n]
 document.getElementById('fecha_final').textContent  = fechaVenci
    
});