"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 CuentaEmpresarial from "../models/cuentaEmpresarialModel.js?v=1.0.0";
import CuentaProveedor from "../models/cuentaProveedorModel.js?v=1.0.0";

window.onload = () => {
  inicializarTablas()
    .then(() => configCXP.inicializar())
    .then(() => configCXC.inicializar())
    .then(() => configProveedor.inicializar())
    .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 {
      configCXP.tabla = new CustomDataTable({
        id: "cuentas-por-pagar-tbl",
        alineadoIzquierda: [1, 11],
        noOrdenable: [],
        adicional: {
          lengthChange: false,
          buttons: [
            {
              extend: "excel",
              text: '<i class="fas fa-file-excel"></i> Excel',
              title: "Reporte de cuentas por pagar empresariales",
              className: "btn-success btn-sm",
              action: function (e, dt, node, config) {
                if (configCXP.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",
                  });
                }
              },
            },
          ],
        },
      });
      configCXP.tabla.tabla
        .buttons()
        .container()
        .appendTo("#cuentas-por-pagar-tbl_wrapper .col-md-6:eq(0)");

      configCXC.tabla = new CustomDataTable({
        id: "cuentas-por-cobrar-tbl",
        alineadoIzquierda: [1, 11],
        noOrdenable: [],
        adicional: {
          lengthChange: false,
          buttons: [
            {
              extend: "excel",
              text: '<i class="fas fa-file-excel"></i> Excel',
              title: "Reporte de cuentas por cobrar empresariales",
              className: "btn-success btn-sm",
              action: function (e, dt, node, config) {
                if (configCXC.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",
                  });
                }
              },
            },
          ],
        },
      });
      configCXC.tabla.tabla
        .buttons()
        .container()
        .appendTo("#cuentas-por-cobrar-tbl_wrapper .col-md-6:eq(0)");

      configProveedor.tabla = new CustomDataTable({
        id: "cuentas-proveedores-tbl",
        alineadoIzquierda: [1],
        noOrdenable: [],
        adicional: {
          lengthChange: false,
          buttons: [
            {
              extend: "excel",
              text: '<i class="fas fa-file-excel"></i> Excel',
              title: "Reporte de cuentas de proveedores",
              className: "btn-success btn-sm",
              action: function (e, dt, node, config) {
                if (configProveedor.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",
                  });
                }
              },
            },
          ],
        },
      });
      configProveedor.tabla.tabla
        .buttons()
        .container()
        .appendTo("#cuentas-proveedores-tbl_wrapper .col-md-6:eq(0)");

      configDatos.tabla = new CustomDataTable({
        id: "resumen-tbl",
        alineadoIzquierda: [1],
        noOrdenable: [],
        adicional: {
          lengthChange: false,
          buttons: [
            {
              extend: "excel",
              text: '<i class="fas fa-file-excel"></i> Excel',
              title: "Reporte resúmen",
              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("#resumen-tbl_wrapper .col-md-6:eq(0)");
      resolve();
    } catch (err) {
      reject(err);
    }
  });
}

const configCXP = {
  id: 0,
  cnt: 0,
  data: [],
  tabla: null,
  inicializar: function () {
    return new Promise(async (resolve, reject) => {
      try {
        const { data: cuentas = [] } =
          await CuentaEmpresarial.obtenerCXPPendientes();

        this.data = cuentas;

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

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

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

        this.tabla.redibujar();
        resolve();
      } catch (err) {
        reject(err);
      }
    });
  },
  prepararParaFila: function ({ datos, id }) {
    return {
      0: id,
      1: datos.nombre_banco,
      2: datos.fecha_otorgamiento,
      3: datos.montofinanciado,
      4: datos.valorcuota,
      5: datos.cantidadcuotas,
      6: datos.periodicidad,
      7: datos.tasanormal,
      8: datos.saldocapital,
      9: datos.fecha_ultimo_pago,
      10: `$0.00`,
      11: datos.observaciones,
    };
  },
};

const configCXC = {
  id: 0,
  cnt: 0,
  data: [],
  tabla: null,
  inicializar: function () {
    return new Promise(async (resolve, reject) => {
      try {
        const { data: cuentas = [] } =
          await CuentaEmpresarial.obtenerCXCPendientes();

        this.data = cuentas;

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

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

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

        this.tabla.redibujar();
        resolve();
      } catch (err) {
        reject(err);
      }
    });
  },
  prepararParaFila: function ({ datos, id }) {
    return {
      0: id,
      1: datos.nombre_banco,
      2: datos.fecha_otorgamiento,
      3: datos.montofinanciado,
      4: datos.valorcuota,
      5: datos.cantidadcuotas,
      6: datos.periodicidad,
      7: datos.tasanormal,
      8: datos.saldocapital,
      9: datos.fecha_ultimo_pago,
      10: `$0.00`,
      11: datos.observaciones,
    };
  },
};

const configProveedor = {
  id: 0,
  cnt: 0,
  data: [],
  tabla: null,
  inicializar: function () {
    return new Promise(async (resolve, reject) => {
      try {
        const { data: cuentas = [] } =
          await CuentaProveedor.obtenerCXPPendientes();

        this.data = cuentas;

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

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

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

        this.tabla.redibujar();
        resolve();
      } catch (err) {
        reject(err);
      }
    });
  },
  prepararParaFila: function ({ datos, id }) {
    return {
      0: id,
      1: datos.nombre_proveedor,
      2: datos.total,
      3: datos.saldo,
      4: datos.de_01_a_30,
      5: datos.de_31_a_60,
      6: datos.de_61_a_90,
      7: datos.mas_90,
    };
  },
};

const configDatos = {
  id: 0,
  cnt: 0,
  data: [],
  tabla: null,
  inicializar: function () {
    return new Promise(async (resolve, reject) => {
      try {
        const { data: cuentas = [] } =
          await CuentaEmpresarial.obtenerInformeResumen();

        this.data = cuentas;

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

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

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

        this.tabla.redibujar();
        resolve();
      } catch (err) {
        reject(err);
      }
    });
  },
  prepararParaFila: function ({ datos, id }) {
    return {
      0: datos.nomempresa,
      1: `$${parseFloat(datos.banco_saldo_k).toLocaleString("en-US")}`,
      2: `$${parseFloat(datos.banco_saldo_cuota).toLocaleString("en-US")}`,
      3: `$${parseFloat(datos.intercompanies_saldo_cuota).toLocaleString(
        "en-US"
      )}`,
      4: `$${parseFloat(datos.intercompanies_saldo_cuota).toLocaleString(
        "en-US"
      )}`,
      5: `$${parseFloat(datos.proveedor_monto).toLocaleString("en-US")}`,
      6: `$${parseFloat(datos.impuestos_monto).toLocaleString("en-US")}`,
      7: `$${parseFloat(datos.acreedores_monto).toLocaleString("en-US")}`,
      8: `$${parseFloat(datos.deuda).toLocaleString("en-US")}`,
      9: `$${parseFloat(datos.cxc_monto).toLocaleString("en-US")}`,
      10: `$${parseFloat(datos.diferencia).toLocaleString("en-US")}`,
    };
  },
};
