import { ResultSetHeader, RowDataPacket } from "mysql2";
import DB from "../config/database/db";
import paymentLinkTypes from "../schemas/paymentLinks.schema";
import CONSTANTS from "../config/constants";

const paymentLinkDB: any = {};

paymentLinkDB.add = async ({
  clientId,
  propId,
  tenantId,
  invoiceNo,
  dueId,
  ledgerReferenceId,
  amount,
  dueType,
  paymentLink,
  description,
  status,
  apiResponse,
}: paymentLinkTypes) => {
  const query =
    "Insert into PaymentLinks (clientId, propId, tenantId, invoiceNo, dueId, ledgerReferenceId, amount, dueType, paymentLink, description, status, apiResponse) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
  const data = [
    clientId,
    propId,
    tenantId,
    invoiceNo,
    dueId,
    ledgerReferenceId,
    amount,
    dueType,
    paymentLink,
    description,
    status,
    apiResponse,
  ];
  const [row] = await DB.execute<ResultSetHeader>(query, data);
  return row.insertId;
};

paymentLinkDB.getByDueId = async ({ dueId }: paymentLinkTypes) => {
  const query = "Select * from PaymentLinks where dueId = ? and status != ?";
  const data = [dueId, CONSTANTS.PAYMENT_LINK_STATUS.FAILED];
  const [rows] = await DB.execute<RowDataPacket[]>(query, data);
  if (rows?.length > 0) return rows[0];
  else return false;
};

paymentLinkDB.updateStatus = async ({ status, dueId }: paymentLinkTypes) => {
  const query = "Update PaymentLinks set status = ? where dueId = ?";
  const data = [status, dueId];
  const [rows] = await DB.execute<ResultSetHeader>(query, data);
  return true;
};

export default paymentLinkDB;