import { ObjectId } from "mongoose";
import envConfig from "src/common/config/envConfig";
import { getUserContactUsTemplate } from "./template/contactUs.template";
import { getUserRequestFeatureTemplate } from "./template/feature-request.template";
import { getUserGeneralFeedbackTemplate } from "./template/general-feedback.template";
import { getUserEmailVerificationTemplate } from "./template/userEmailVerification.template";
import { getUserResetPasswordEmailTemplate } from "./template/userResetPassword.template";
import { getWelcomeEmailTemplate } from "./template/welcomeEmail.template";
import { getSupportTicketResponseTemplate } from "./template/support-ticket-response.template";
import { getSupportTicketClosedTemplate } from "./template/support-ticket-closed.template";

export const emailConfig = (emailBody: Partial<IEmailBody>) => {

    let template = ''

    if (emailBody?.template === 'verifyEmail') template = getUserEmailVerificationTemplate(emailBody.body)
    else if (emailBody?.template === 'resetPassword') template = getUserResetPasswordEmailTemplate(emailBody.body)
    else if (emailBody?.template === 'featureRequest') template = getUserRequestFeatureTemplate(emailBody.body)
    else if (emailBody?.template === 'generalFeedback') template = getUserGeneralFeedbackTemplate(emailBody.body)
    else if (emailBody?.template === 'welcomeEmail') template = getWelcomeEmailTemplate(emailBody.body)
    else if (emailBody?.template === 'supportTicketResponse') template = getSupportTicketResponseTemplate(emailBody.body)
    else if (emailBody?.template === 'supportTicketClosed') template = getSupportTicketClosedTemplate(emailBody.body)
    else if (emailBody?.template === 'contactUs') template = getUserContactUsTemplate(emailBody.body)

    return {
        Destination: { /* required */
            //   CcAddresses: [
            // 	'EMAIL_ADDRESS',
            // 	/* more items */
            //   ],
            ToAddresses: [
                ...emailBody.toEmail,
                /* more items */
            ]
        },
        Message: { /* required */
            Body: { /* required */
                Html: {
                    Charset: "UTF-8",
                    Data: template
                },
                Text: {
                    Charset: "UTF-8",
                    Data: `This is the message body in text format for ${emailBody.heading}.`
                }
            },
            Subject: {
                Charset: 'UTF-8',
                Data: `${emailBody.subject}`
            }
        },
        Source: `Bina+ AI <${envConfig().AWS_SOURCE_EMAIL}>`, /* required */
        ReplyToAddresses: ['noreply@binaplus.ai'],
    };
};

export interface IEmailBody {
    toEmail: string[]
    heading: string
    subject: string
    template: 'verifyEmail' | 'resetPassword' | 'featureRequest' | 'generalFeedback' | 'welcomeEmail' | 'supportTicketResponse' | 'supportTicketClosed'
    body?: Partial<EmailBody>
    isReply?: boolean
    replyEmailAddress?: string

    // mongoIds
    userId?: string | ObjectId

    // time stamps
    createdAt?: number
    updatedAt?: number
}

export class EmailBody {
    title?: string
    message?: string
    subMessage?: string
    code?: number
    email?: string
    password?: string
    icon?: string
    name?: string
    phone?: string
    link?: string
    buttonText?: string
    buttonLink?: string
    showButton?: boolean
    date?: string
    container?: any
    addSignature?: boolean
    signatureBody?: {
        name: string
        title: string
        email: string
        image: string
    } | null
    files?: files[]
}

class files {
    id: string
    mimeType: string
    name: string
    link?: string
}