import handleNodemailer, {
    HandleNodemailerParam,
} from "../../backend/handleNodemailer";
import emailMxLookup from "../verification/email-mx-lookup";
import emailRegexCheck from "../verification/email-regex-test";

type Param = {
    email?: string;
    welcomeEmailOptions?: HandleNodemailerParam;
};
export default async function validateEmail({
    email,
    welcomeEmailOptions,
}: Param): Promise<{ isValid: boolean; message?: string }> {
    if (!email) {
        return {
            isValid: false,
            message: "Email is required.",
        };
    }

    if (!emailRegexCheck(email)) {
        return {
            isValid: false,
            message: "Invalid email format.",
        };
    }

    const checkEmailMxRecords = await emailMxLookup(email);

    if (!checkEmailMxRecords) {
        return {
            isValid: false,
            message: "Email domain does not have valid MX records.",
        };
    }

    if (welcomeEmailOptions) {
        const welcomeEmail = await handleNodemailer(welcomeEmailOptions);
        if (!welcomeEmail?.accepted?.[0]) {
            return {
                isValid: false,
                message: "Email verification failed.",
            };
        }
    }

    return {
        isValid: true,
        message: "Email is valid.",
    };
}