import axios from "axios";
import fs from "fs";
import path from "path";
import { whatsappLog } from "../../serviceLog";
import moment from "moment";


export const sendWhatsappMeta = async (
    mobile: string,
    formBody: any,
    file: any = null,
    templateName: string,
    lang: string,
    projectId: string,
    credentials: any,
    clientId: number = 0,
) => {
    const F = "sendWhatsappMeta";
    try {
        const validateMobile = (mobile: string) => {
            const number = mobile.replace(/\D/g, "").slice(-10);

            return /^[6-9]\d{9}$/.test(number) ? `91${number}` : null;
        };

        let mobileNumber = validateMobile(mobile);
        if(!mobileNumber) {
            whatsappLog.info(
                `[${F}], Client Id [${clientId}], Mobile [${mobileNumber}], Failed to send Not a valid mobile number`
            );
            return {
                status: false,
                message: `Not a valid number`
            };
        }
        let component: any[] = [];

        if (file) {
            const fileName = path.basename(new URL(file).pathname);
            //const url = `${flle}?v=${moment().format("YYYYMMDDHHmmss")}`;
            component.push({
                type: "header",
                parameters: [
                    {
                        type: "document",
                        document: {
                            link: file,
                            filename: fileName
                        }
                    }
                ]
            })
        }
        const bodyParameter = {
            type: "body",
            parameters: formBody.map((value: any) => ({
                type: "text",
                text: value
            }))
        };
        // console.log(bodyParameter);
        // console.log(credentials);
        component.push(bodyParameter);
        const messageBody = {
            messaging_product: "whatsapp",
            to: mobileNumber,
            type: "template",
            template: {
                name: templateName,
                language: {
                    code: lang
                },
                components: component
            }
        };


        const response2: any = await axios.post(
            `${process.env.WHATSAPP_META_SEND_MESSAGE_URI}/${projectId}/messages`,
            messageBody,
            {
                timeout: 8000,
                headers: {
                    Authorization: `Bearer ${credentials?.key}`,
                    "Content-Type": "application/json"

                },
            }
        );

        const messageStatus = response2?.data?.messages?.[0]?.message_status;

        if (messageStatus === 'accepted') {
            whatsappLog.info(
                `[${F}], Client Id [${clientId}], Mobile [${mobile}], Message sent successfully, Response : ${JSON.stringify(
                    response2?.data
                )}`
            );
            return {
                status: true,
                message: `Message sent successfully`
            };
        } else {
            whatsappLog.info(
                `[${F}], Client Id [${clientId}], Mobile [${mobile}], Unable to send message, Response : ${JSON.stringify(
                    response2?.data
                )}`
            );
            return {
                status: false,
                message: `Error while sending message`

            };
        }
    } catch (error: any) {
        whatsappLog.info(
            `[${F}], Client Id [${clientId}], Mobile [${mobile}], Error: ${JSON.stringify(error?.response?.data) || error?.message || error
            }`
        );
        return {
            status: false,
            message: "Error while sending message"
        };
    }
};

export default sendWhatsappMeta;
