import axios from 'axios';
import CustomRequest from "../types/requestType";
import { Response } from "express";
import fs from 'fs';
import { promises as fsPromises } from 'fs';
// @ts-ignore
import pdf from "pdf-creator-node";
import CONSTANTS from '../config/constants';
import moment from 'moment';
export const payoutReciept = async (details: any) => {
  const folderName = `payoutReciept`;
  const currentYear = moment().year();
  let clientId = details.clientId;
  let logo = details.logo;
  let transferId = details.transferId;
  let transferMethod = details.transferMethod;
  let amount = details.amount;
  let businessName = details.businessName;
  let beneficiaryName = details.beneficiaryName;
  let accountNumber = details.accountNumber;
  let ifsc = details.ifsc;
  let utr = details.utr;
  let remarks = details.remarks;
  let charges = details.charges;
  let paymentDate = moment(details?.paymentDate).format('DD MMM YYYY, hh:mm A');

  const folderPath = `uploads/documents/${currentYear}/${folderName}/${clientId}/${transferId}`;

  if (!fs.existsSync(folderPath)) {
    await fsPromises.mkdir(folderPath, { recursive: true });
  }

  const urlBasePath = `${process.env.UPLOAD_PATH}/documents/${currentYear}/${folderName}/${clientId}/${transferId}`;


  //let templatePath = "http://172.208.33.94:3001/uploads/documents/defaults/payout-reciept.html";
  let templatePath = process.env.PAYOUT_RECEIPT!;
  let { data: html } = await axios.get(templatePath);


  let mode = "UPI";
  html = html.toString();
  html = html.replace(/{{logo}}/g, logo);
  html = html.replace(/{{transferId}}/g, transferId);
  html = html.replace(/{{transferMethod}}/g, transferMethod);
  html = html.replace(/{{businessName}}/g, businessName);
  html = html.replace(/{{paymentDate}}/g, paymentDate);
  html = html.replace(/{{beneficiaryName}}/g, beneficiaryName);
  html = html.replace(/{{accountNumber}}/g, accountNumber);
  html = html.replace(/{{ifsc}}/g, ifsc);
  html = html.replace(/{{utr}}/g, utr);
  html = html.replace(/{{remarks}}/g, remarks);
  html = html.replace(/{{amount}}/g, amount);
  let amountPortion = "";
  if(Number(charges)) {
    amountPortion = `<tr>
    <td class="label">
        Amount
    </td>

    <td style="text-align:right;font-weight:bold;">
        ₹${Number(amount) + Number(charges)}
    </td>
</tr>

<tr>
    <td class="label">
        Convenience Charges
    </td>

    <td style="text-align:right;">
        -₹${charges}
    </td>
</tr>

<tr style="background:#fafafa;">
    <td style="font-weight:bold;">
        Total
    </td>

    <td style="
        text-align:right;
        font-weight:bold;
    ">
        ₹${Number(amount)}
    </td>
</tr>`;
  } else {
    amountPortion = `<tr>
    <td class="label">
        Amount
    </td>

    <td style="text-align:right;font-weight:bold;">
        ₹${amount}
    </td>
</tr>

<tr>
    <td class="label">
        Convenience Charges
    </td>

    <td style="text-align:right;">
        -₹0.00
    </td>
</tr>

<tr style="background:#fafafa;">
    <td style="font-weight:bold;">
        Total
    </td>

    <td style="
        text-align:right;
        font-weight:bold;
    ">
        ₹${amount}
    </td>
</tr>`;
  }
  html = html.replace(/{{amountPortion}}/g, amountPortion);

  html = html.replace(/\n/g, "");

  const options = {
    format: "A4",
    orientation: "portrait",
    border: "10mm",
    childProcessOptions: {
      env: {
        OPENSSL_CONF: "/dev/null",
      },
    },
  };

  const filename = `reciept_${transferId}.pdf`;
  let url = `${urlBasePath}/${filename}`;

  var document = {
    html: html,
    path: `${folderPath}/${filename}`,
    data: {},
    type: "",
  };

  await pdf.create(document, options);
  return url;

}
