/**
 * Sendet eine E-Mail über die Brevo REST API.
 * 
 * @param {string} toEmail      - Die Ziel E-Mail Adresse
 * @param {string} toName       - Der Benutzername des Empfängers
 * @param {string} subject      - Der Betreff der E-Mail
 * @param {string} htmlContent  - Der HTML-Inhalt der E-Mail
 * @returns {boolean}           - true wenn erfolgreich, wirft einen Fehler wenn nicht.
 */
export const sendEmail = async (toEmail, toName, subject, htmlContent) => {
    const mailMode = process.env.MAIL_MODE || 'development';

    // Im Development-Modus loggen wir nur, um das API-Limit nicht zu belasten
    if (mailMode === 'development') {
        console.log(`\n[DEV-MAIL-SIMULATION] An: ${toEmail}`);
        console.log(`[DEV-MAIL-SIMULATION] Betreff: ${subject}`);
        console.log(`[DEV-MAIL-SIMULATION] Inhalt:\n${htmlContent}\n`);
        return true;
    }
    
    // Echter Versand über Brevo
    try {
        const response = await fetch('https://api.brevo.com/v3/smtp/email', {
            method: 'POST',
            headers: {
                'accept': 'application/json',
                'api-key': process.env.BREVO_API_KEY,
                'content-type': 'application/json'
            },
            body: JSON.stringify({
                sender: {
                    name: process.env.BREVO_SENDER_NAME,
                    email: process.env.BREVO_SENDER_EMAIL
                },
                to: [{
                    email: toEmail,
                    name: toName
                }],
                subject: subject,
                htmlContent: htmlContent
            })
        });

        if (!response.ok) {
            const errorData = await response.json();
            console.error('Brevo API Fehler-Details:', errorData);
            throw new Error('Fehler bei der Kommunikation mit dem E-Mail-Provider.');
        }

        return true;
    } catch (error) {
        console.error('Fehler im email.service:', error);
        throw error; // Den Fehler werfen wir weiter, damit der Aufrufer ihn behandeln kann.
    }
}