import axios from "axios";
import fs from "fs";
import path from "path";
import log from "../config/log";
import CONSTANTS from "../config/constants";
import { getClientWhatsappCredentialsMessageCentral } from "./getClientWhatsappCredentials";


export const sendWhatsappMC = async (
  mobile: string,
  clientId: number = 0,
  propId: number = 0,
  formBody : Record<string, string> = {},
  templateType: number,
  userType: number = CONSTANTS.USER_TYPE.TENANT,
  provider: number = CONSTANTS.CLIENT_CONFIG_PROVIDER.MESSAGE_CENTRAL,
  file:any = null,
) => {
  const F = "sendWhatsappMC";
  try {
    let credentials = await getClientWhatsappCredentialsMessageCentral(clientId, propId, templateType, userType);
    if(!credentials) {
      log.info(
        `[${F}], Client Id [${clientId}], Mobile [${mobile}, Failed to get key`
      );
      return {
        status:'cred_failed'
      };
    }
    const messageBody = new FormData();
    messageBody.append("template_id", credentials?.templateName);
    messageBody.append("country_code", "91");
    messageBody.append("phone_number", mobile);
    Object.entries(formBody).forEach(([key, value]) => {
      messageBody.append(key, value);
    });
    
    if (file) {
      // const blob = new Blob([fs.readFileSync(file)], {
      //   type: "application/pdf",
      // });
      // const fileName = path.basename(file);
      // messageBody.append("header_document", blob, fileName);
      const fileName = path.basename(file);
      const fileObj = new File(
        [fs.readFileSync(file)],
        fileName,
        {
          type: "application/pdf",
        }
      );
      messageBody.append("header_document", fileObj);
      log.info(
        `[${F}], Mobile [${mobile}], File Name [${fileName}], Message sent successfully`
      );
    }
    
    const response2: any = await axios.post(
      `${process.env.WHATSAPP_MC_SEND_MESSAGE_URI}`,
      messageBody,
      {
        timeout: 8000,
        headers: {
          "X-Project-Id": credentials?.projectId,
          "x-api-key": credentials?.key,
        },
      }
    );
  
    if (response2?.data?.response === 'SUCCESS') {
      log.info(
        `[${F}], Mobile [${mobile}], Message sent successfully, Response : ${JSON.stringify(
          response2?.data
        )}`
      );
      return {
        status:'send_success'
      };
    } else {
      log.info(
        `[${F}], Mobile [${mobile}], Unable to send message, Response : ${JSON.stringify(
          response2?.data
        )}`
      );
      return {
        status:'send_failed'
      };
    }
  } catch (error: any) {
    log.info(
      `[${F}], Mobile [${mobile}], Error: ${
        JSON.stringify(error?.response?.data) || error?.message || error
      }`
    );
    return {
        status:'send_failed'
    };
  }
};

export default sendWhatsappMC;
