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 returnMail: Mail.Options = {
        from: user,
        to: email,
        subject: `DKI - Received your message`,
        text: `Hello ${name},\n\nThank you for your message. I will get back to you as soon as possible.\n\nBest regards,\nDennis Konkol`,
    };

    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);
                }
            });
            transport.sendMail(returnMail, function (err, info) {
                if (err) {
                    console.error('Error sending return email:', err);
                } else {
                    console.log('Return email sent:', info.response);
                }
            });
        });

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