"use strict";

import {
  mostrarMensajes,
  mostrarToastify,
} from "../../../../assets/js/app/funcionesGenerales.js?v=1.0.0";
import CustomDataTable from "../../../../assets/js/app/CustomDataTable.js?v=1.0.0";
import CuentaImpuesto from "../models/cuentaImpuestoModel.js?v=1.0.0";

window.onload = () => {
  inicializarTablas()
    .then(() => configDatos.inicializar())
    .then(() => {
      document.querySelector(".loader") &&
        document.querySelector(".loader").classList.add("d-none");
    })
    .catch(mostrarMensajes.error);
};

function inicializarTablas() {
  return new Promise((resolve, reject) => {
    try {
      configDatos.tabla = new CustomDataTable({
        id: "cuentas-por-pagar-tbl",
        alineadoIzquierda: [1, 2, 5],
        noOrdenable: [],
        adicional: {
          lengthChange: false,
          buttons: [
            {
              extend: "excel",
              text: '<i class="fas fa-file-excel"></i> Excel',
              title: "Reporte de cuentas por pagar proveedores",
              className: "btn-success btn-sm",
              action: function (e, dt, node, config) {
                if (configDatos.data.length > 0) {
                  $.fn.dataTable.ext.buttons.excelHtml5.action.call(
                    this,
                    e,
                    dt,
                    node,
                    config
                  );
                } else {
                  mostrarToastify({
                    type: "warning",
                    message: "No hay datos para exportar",
                  });
                }
              },
            },
          ],
        },
      });
      configDatos.tabla.tabla
        .buttons()
        .container()
        .appendTo("#cuentas-por-pagar-tbl_wrapper .col-md-6:eq(0)");

      resolve();
    } catch (err) {
      reject(err);
    }
  });
}

const configDatos = {
  id: 0,
  cnt: 0,
  data: [],
  tabla: null,
  campos: {
    total: document.getElementById("num-total"),
    total_saldo: document.getElementById("num-total-saldo"),
  },
  inicializar: function () {
    return new Promise(async (resolve, reject) => {
      try {
        let total = 0,
          total_saldo = 0;

        const { data: cuentas = [] } =
          await CuentaImpuesto.obtenerCXPPendientes();

        this.data = cuentas;

        cuentas.forEach((cuenta) => {
          this.cnt++;

          total += parseFloat(
            cuenta.monto.replace("$", "").split(",").join("")
          );
          total_saldo += parseFloat(
            cuenta.saldo.replace("$", "").split(",").join("")
          );

          const fila = this.prepararParaFila({
            datos: cuenta,
            id: this.cnt,
          });

          this.tabla.agregarFila({
            datos: fila,
            idFila: `trCuenta${this.cnt}`,
          });
        });

        this.campos.total.value = `$${total.toLocaleString("en-US")}`;
        this.campos.total_saldo.value = `$${total_saldo.toLocaleString(
          "en-US"
        )}`;
        this.tabla.redibujar();

        resolve();
      } catch (err) {
        reject(err);
      }
    });
  },
  prepararParaFila: function ({ datos, id }) {
    return {
      0: id,
      1: datos.cuenta,
      2: datos.impuesto,
      3: datos.monto,
      4: datos.saldo,
      5: datos.observaciones,
    };
  },
};
