import { Router, Request, Response } from 'express';
import pool from '../config/db';
import { RowDataPacket, ResultSetHeader } from 'mysql2';

const router = Router();

// Validation helper
const isValidEmail = (email: string) => {
    return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
};

router.post('/', async (req: Request, res: Response): Promise<void> => {
    const { nom, prenom, email, message } = req.body;

    // 1. Validation
    const errors: string[] = [];

    if (!nom || nom.trim() === '') errors.push('Le nom est requis.');
    if (!prenom || prenom.trim() === '') errors.push('Le prénom est requis.');
    if (!email || email.trim() === '') {
        errors.push("L'email est requis.");
    } else if (!isValidEmail(email)) {
        errors.push("L'format de l'email est invalide.");
    }
    // if (!message || message.trim() === '') errors.push('Le message est requis.'); // Message is now optional

    if (errors.length > 0) {
        res.status(400).json({ status: 'error', errors });
        return;
    }

    // Default message if empty
    const messageContent = (!message || message.trim() === '') ? 'Supprimer toutes les données' : message;

    // 2. Insert into Database
    try {
        const query = 'INSERT INTO messages (nom, prenom, email, message) VALUES (?, ?, ?, ?)';
        const [result] = await pool.query<ResultSetHeader>(query, [nom, prenom, email, messageContent]);

        res.status(201).json({
            status: 'success',
            message: 'Demande envoyée avec succès.',
            id: result.insertId
        });
    } catch (error: any) {
        console.error('Error inserting message:', error);
        res.status(500).json({ status: 'error', message: 'Erreur serveur lors de la sauvegarde.' });
    }
});

export default router;
