import DB from "../config/database/db";
import { ResultSetHeader, RowDataPacket } from "mysql2";
import requestTypes from "../schemas/request.schema";
import tenantBankTypes from "../schemas/tenantBankAccount.schema";

const tenantBankDB: any = {};

tenantBankDB.getById = async ({ id }: tenantBankTypes) => {
  const query = "Select * from TenantBankAccounts where id = ?";
  const data = [id];
  const [rows] = await DB.execute<RowDataPacket[]>(query, data);
  if (rows?.length > 0) return rows[0];
  else return false;
};

tenantBankDB.getByClientIdAndTenantId = async ({ clientId, tenantId }: tenantBankTypes) => {
  const query =
    "Select bankName, accountNum, ifsc, bankAddress, holderName, upiId from TenantBankAccounts where clientId = ? and tenantId = ? order by id desc";
  const data = [clientId, tenantId];
  const [rows] = await DB.execute<RowDataPacket[]>(query, data);
  if (rows?.length > 0) return rows[0];
  else return [];
};
tenantBankDB.getByClientIdAndTenantIdAfterMoveOutDate = async ({ clientId, tenantId, moveOutDate }: tenantBankTypes & {moveOutDate: string}) => {
  const query =
    "Select bankName, accountNum, ifsc, bankAddress, holderName, upiId from TenantBankAccounts where clientId = ? and tenantId = ? and date(createdAt) >= ?   order by id desc";
  const data = [clientId, tenantId, moveOutDate];
  const [rows] = await DB.execute<RowDataPacket[]>(query, data);
  if (rows?.length > 0) return rows[0];
  else return false;
};

tenantBankDB.addBank = async ({
  clientId,
  tenantId,
  holderName,
  accountNum,
  ifsc,
  bankAddress,
  bankName,
  upiId,
}: tenantBankTypes) => {
  const query =
    "Insert into TenantBankAccounts (clientId, tenantId, holderName, accountNum, ifsc, bankAddress, bankName, upiId) values (?, ?, ?, ?, ?, ?, ?, ?)";
  const data = [
    clientId,
    tenantId,
    holderName,
    accountNum,
    ifsc,
    bankAddress,
    bankName,
    upiId,
  ];
  const [rows] = await DB.query<ResultSetHeader>(query, data);
  return rows.insertId;
};

tenantBankDB.updateBank = async ({
  holderName,
  accountNum,
  ifsc,
  bankAddress,
  bankName,
  upiId,
  id,
}: tenantBankTypes & { id: number }) => {
  const query =
    "update TenantBankAccounts set  holderName = ? , accountNum = ? , ifsc = ? , bankAddress = ? , bankName = ?, upiId = ? where id = ?";
  const data = [
    holderName,
    accountNum,
    ifsc,
    bankAddress,
    bankName,
    upiId,
    id,
  ];
  const [rows] = await DB.query<ResultSetHeader>(query, data);
  return rows.insertId;
};

export default tenantBankDB;
