import { baseMail, transporter } from "@/app/lib/mailer";
import { NextResponse } from "next/server";
import { db } from "@/app/lib/db";

export async function POST(req) {
    const { email } = await req.json();

    if (!email) {
        return NextResponse.json({ message: 'Invalid email' }, { status: 400 });
    }

    const validate_token = Math.random().toString(36).substr(2, 10);

    await (await db).query('UPDATE users SET VALIDATE_TOKEN = ? WHERE EMAIL = ?', [validate_token, email]);

    const mailOptions = {
        from: '"InfoGare" <contact@infogare.fr>',
        to: email,
        replyTo: 'contact@infogare.fr',
        subject: 'Validation de votre email',
        html: baseMail('Validation de votre email', `
            <p>Bonjour,</p>
            <p>
            Merci de nous avoir rejoints ! Nous sommes ravis de vous compter parmi
            nous. Cliquez sur le bouton ci-dessous pour confirmer votre email et
            commencer à utiliser InfoGare.
            </p>
            <a
            href="http://localhost:3000/mail/validate?token=${validate_token}"
            class="email-button"
            >Confirmer mon email</a
            >
            <p>
            Si vous avez des questions, n'hésitez pas à nous contacter à
            <a href="mailto:contact@infogare.fr">contact@infogare.fr</a>.
            </p>
            <p>Merci,</p>
            <p><b>L'équipe InfoGare</b></p>
        `)
    };

    const res = await transporter.sendMail(mailOptions);

    if (res.accepted.length === 0) {
        return NextResponse.json({ message: 'Invalid email' }, { status: 400 });
    } else {
        return NextResponse.json({ message: 'OK' });
    }
}

export async function GET(req) {
    const token = req.nextUrl.searchParams.get('token');

    if (!token) {
        return NextResponse.json({ message: 'Invalid token' }, { status: 400 });
    }

    const [rows] = await (await db).query('SELECT EMAIL FROM users WHERE VALIDATE_TOKEN = ?', [token]);

    if (rows.length === 0) {
        return NextResponse.json({ message: 'Invalid token' }, { status: 400 });
    }

    await (await db).query('UPDATE users SET EMAIL_VALID = 1, VALIDATE_TOKEN = NULL WHERE VALIDATE_TOKEN = ?', [token]);

    return NextResponse.json({ email: rows[0].EMAIL });
}