import { type Response } from "express";
import log from "../config/log";
import type CustomRequest from "../types/requestType";
import cashfreePayout from "../utils/cashfree";

const cashfree: any = {};

cashfree.AddBeneficiary = async (req: CustomRequest, res: Response) => {
  const C = "Cashfree Controller";
  const F = "AddBeneficiary";

  try {
    let requestData = JSON.stringify(req.body);
    log.info(`[${C}], [${F}], Request body [${requestData}]`);
    return cashfreePayout.addBeneficiary(req, res);
  } catch (err: any) {
    log.info(`[${C}], [${F}], Error:`, err.response?.data || err.message);
    return res.status(400).json(err);
  }
};

cashfree.RemoveBeneficiary = async (req: CustomRequest, res: Response) => {
  const C = "Cashfree Controller";
  const F = "RemoveBeneficiary";

  try {
    //let requestData = JSON.stringify(req.body);
    //log.info(`[${C}], [${F}], Request body [${requestData}]`);
    return cashfreePayout.removeBeneficiary(req, res);
  } catch (err: any) {
    log.info(`[${C}], [${F}], Error:`, err.response?.data || err.message);
    return res.status(400).json(err);
  }
};

cashfree.FetchBeneficiary = async (req: CustomRequest, res: Response) => {
  const C = "Cashfree Controller";
  const F = "FetchBeneficiary";

  try {
    let requestData = JSON.stringify(req.query);
    log.info(`[${C}], [${F}], Request body [${requestData}]`);
    return cashfreePayout.fetchBeneficiary(req, res);
  } catch (err: any) {
    log.info(`[${C}], [${F}], Error:`, err.response?.data || err.message);
    return res.status(400).json(err);
  }
};

cashfree.PayoutToBeneficiary = async (req: CustomRequest, res: Response) => {
  const C = "Cashfree Controller";
  const F = "PayoutToBeneficiary";

  try {
    let requestData = JSON.stringify(req.body);
    log.info(`[${C}], [${F}], Request body [${requestData}]`);
    return cashfreePayout.payoutToBeneficiary(req, res);
  } catch (err: any) {
    log.info(`[${C}], [${F}], Error:`, err.response?.data || err.message);
    return res.status(400).json(err);
  }
};

cashfree.QuickPayout = async (req: CustomRequest, res: Response) => {
  const C = "Cashfree Controller";
  const F = "QuickPayout";

  try {
    let requestData = JSON.stringify(req.body);
    log.info(`[${C}], [${F}], Request body [${requestData}]`);
    return cashfreePayout.quickPayout(req, res);
  } catch (err: any) {
    log.info(`[${C}], [${F}], Error:`, err.response?.data || err.message);
    return res.status(400).json(err);
  }
};

cashfree.GetWalletBalance = async (req: CustomRequest, res: Response) => {
  const C = "Cashfree Controller";
  const F = "GetWalletBalance";

  try {
    // let requestData = req.query;
    //log.info(`[${C}], [${F}], Request body [${requestData}]`);
    return cashfreePayout.getWalletBalance(req, res);
  } catch (err: any) {
    console.log(err)
    log.info(`[${C}], [${F}], Error:`, err.response?.data || err.message);
    return res.status(400).json(err);
  }
};

cashfree.Callback = async (req: CustomRequest, res: Response) => {
  const C = "Cashfree Controller";
  const F = "Callback";
  let requestData = JSON.stringify(req.body);
  log.info(`[${C}], [${F}], Request body [${requestData}]`);
  return cashfreePayout.callback(req, res);
};

cashfree.VerifyAccount = async (req: CustomRequest, res: Response) => {
  const C = "Cashfree Controller";
  const F = "VerifyAccount";
  try {
    let requestData = JSON.stringify(req.body);
    log.info(`[${C}], [${F}], Request body [${requestData}]`);
    return cashfreePayout.verifyAccount(req, res);
  } catch (err: any) {
    log.info(`[${C}], [${F}], Error:`, err.response?.data || err.message);
    return res.status(400).json(err);
  }
};

cashfree.CreateDgLockerLink = async (req: CustomRequest, res: Response) => {
  const C = "Cashfree Controller";
  const F = "CreateDgLockerLink";
  try {
    let requestData = JSON.stringify(req.body);
    log.info(`[${C}], [${F}], Request body [${requestData}]`);
    return cashfreePayout.createDgLockerLink(req, res);
  } catch (err: any) {
    log.info(`[${C}], [${F}], Error:`, err.response?.data || err.message);
    return res.status(400).json(err);
  }
};

cashfree.VerifyDgLockerLink = async (req: CustomRequest, res: Response) => {
  const C = "Cashfree Controller";
  const F = "VerifyDgLockerLink";
  try {
    let requestData = JSON.stringify(req.query);
    log.info(`[${C}], [${F}], Request body [${requestData}]`);
    return cashfreePayout.verifyDgLockerLink(req, res);
  } catch (err: any) {
    log.info(`[${C}], [${F}], Error:`, err.response?.data || err.message);
    return res.status(400).json(err);
  }
};

cashfree.GetDgLockerDoc = async (req: CustomRequest, res: Response) => {
  const C = "Cashfree Controller";
  const F = "GetDgLockerDoc";
  try {
    let requestData = JSON.stringify(req.query);
    log.info(`[${C}], [${F}], Request body [${requestData}]`);
    return cashfreePayout.getDgLockerDoc(req, res);
  } catch (err: any) {
    log.info(`[${C}], [${F}], Error:`, err.response?.data || err.message);
    return res.status(400).json(err);
  }
};

cashfree.AadharOCR = async (req: CustomRequest, res: Response) => {
  const C = "Cashfree Controller";
  const F = "AadharOCR";
  try {
    let requestData = JSON.stringify(req.body);
    log.info(`[${C}], [${F}], Request body [${requestData}]`);
    return cashfreePayout.uploadAadhar(req, res);
  } catch (err: any) {
    log.info(`[${C}], [${F}], Error:`, err.response?.data || err.message);
    return res.status(400).json(err.response?.data || err.message);
  }
};


export default cashfree;
