import { type NextRequest, NextResponse } from "next/server";
import nodemailer from "nodemailer";
import SMTPTransport from "nodemailer/lib/smtp-transport";
import Mail from "nodemailer/lib/mailer";

export async function POST(request: NextRequest) {
    const body = (await request.json()) as {
        email: string;
        name: string;
        message: string;
    };
    const { email, name, message } = body;

    const user = process.env.MY_EMAIL ?? "";
    const pass = process.env.MY_PASSWORD ?? "";

    if (!user || !pass) {
        console.error("Missing email/password environment variables");
        return NextResponse.json(
            { error: "Missing EMAIL or PASSWORD" },
            { status: 500 },
        );
    }

    if (!email || !name || !message) {
        console.error("Invalid request body");
        return NextResponse.json(
            { error: "Invalid request body" },
            { status: 400 },
        );
    }

    const transportOptions: SMTPTransport.Options = {
        host: "smtp.ionos.de",
        port: 587,
        secure: false,
        requireTLS: true,
        auth: {
            type: "login",
            user,
            pass,
        },
    };

    const transport = nodemailer.createTransport(transportOptions);

    const mailOptions: Mail.Options = {
        from: user,
        to: user, // Ensure this is the correct email address
        subject: `Message from ${name} (${email})`,
        text: message + "\n\n" + email,
    };

    const sendMailPromise = () =>
        new Promise<string>((resolve, reject) => {
            transport.sendMail(mailOptions, function (err, info) {
                if (!err) {
                    resolve(info.response);
                } else {
                    console.error("Error sending email:", err);
                    reject(err.message);
                }
            });
        });

    try {
        await sendMailPromise();
        return NextResponse.json({ message: "Email sent" });
    } catch (err) {
        console.error("Error sending email:", err);
        return NextResponse.json({ error: "Failed to send email" }, { status: 500 });
    }
}
