import expressAsyncHandler from "express-async-handler";
import * as yup from "yup";
import { sendEmail } from "../utils/mail.ts";

export const contactSchema = yup.object({
    name: yup.string().required("Name is required"),
    email: yup.string().email("Invalid email").required("Email is required"),
    subject: yup.string().required("Subject is required"),
    message: yup.string().required("Message is required").min(10, "Message must be at least 10 characters"),
});

export const sendContactMessage = expressAsyncHandler(async (req, res) => {
    try {
        await contactSchema.validate(req.body, { abortEarly: false });
        const { name, email, subject, message } = req.body;

        const emailHtml = `
            <div style="font-family: Arial, sans-serif; line-height: 1.6; color: #333; max-width: 600px; margin: 0 auto; border: 1px solid #eee; border-radius: 10px; overflow: hidden;">
                <div style="background-color: #0c1b4d; color: #fff; padding: 20px; text-align: center;">
                    <h1 style="margin: 0;">New Contact Message</h1>
                    <p style="margin: 5px 0 0;">ExamInfra Platform</p>
                </div>
                <div style="padding: 20px;">
                    <p><strong>Name:</strong> ${name}</p>
                    <p><strong>Email:</strong> ${email}</p>
                    <p><strong>Subject:</strong> ${subject}</p>
                    <hr style="border: 0; border-top: 1px solid #eee; margin: 20px 0;">
                    <p><strong>Message:</strong></p>
                    <div style="background-color: #f9f9f9; padding: 15px; border-radius: 5px; border-left: 4px solid #0c1b4d;">
                        ${message}
                    </div>
                </div>
                <div style="background-color: #f4f4f4; padding: 15px; text-align: center; font-size: 12px; color: #777;">
                    This message was sent from the ExamInfra Contact Us form.
                </div>
            </div>
        `;

        const emailRes = await sendEmail(
            process.env.FROM_EMAIL || "info@examinfra.com",
            `ExamInfra Contact: ${subject}`,
            emailHtml
        );
        if (!emailRes.success) {
            res.status(500).json({ message: "Failed to send message. Please try again later." });
            return;
        }

        res.status(200).json({
            success: true,
            message: "Your message has been sent successfully!",
        });
    } catch (err: any) {
        if (err instanceof yup.ValidationError) {
            res.status(400).json({
                success: false,
                message: "Validation failed",
                errors: err.errors,
            });
            return;
        }
        res.status(500).json({
            success: false,
            message: "Server error while sending message",
            error: err?.message
        });
    }
});
