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

dotenv.config();

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

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

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

  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\nSent from ${email}`,
  };

  const sendMailPromise = () =>
    new Promise<string>((resolve, reject) => {
      transport.sendMail(mailOptions, function (err, info) {
        if (!err) {
          console.log("Email sent:", info.response);
          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: err }, { status: 500 });
  }
}
