import nodemailer from 'nodemailer';

// 1. Получаем конфигурацию через import.meta.env (Стандарт Astro)
const smtpConfig = {
    host: import.meta.env.MAIL_HOST || 'localhost',
    port: parseInt(import.meta.env.MAIL_PORT || '1025'),
    secure: import.meta.env.SMTP_SECURE === 'true', // true для 465, false для других
    auth: import.meta.env.MAIL_USER ? {
        user: import.meta.env.MAIL_USER,
        pass: import.meta.env.MAIL_PASS,
    } : undefined,
    // Отключаем проверку сертификатов для локальной разработки (Mailhog/Mailpit)
    tls: {
        rejectUnauthorized: import.meta.env.PROD === true // В продакшене true, локально false
    }
};

// 2. Конфигурация отправителя
export const senderConfig = {
    // Фолбэк адрес обязателен, чтобы не было ошибки 501
    email: import.meta.env.MAIL_FROM || 'noreply@minivan-berlin.de',
    name: import.meta.env.SENDER_NAME || 'Berlin Minivan Transfers',
};

// 3. Создаем транспорт (синхронно, так как это инициализация модуля)
console.log('Создание SMTP транспорта с конфигом:', {
    ...smtpConfig,
    auth: smtpConfig.auth ? { user: smtpConfig.auth.user, pass: '***' } : 'Нет авторизации'
});

const transporter = nodemailer.createTransport(smtpConfig);

// 4. Основная функция отправки
export const sendEmail = async (to: string, subject: string, html: string) => {
    try {
        // Проверка соединения перед отправкой (опционально, но полезно для отладки)
        // await transporter.verify();

        const fromString = `"${senderConfig.name}" <${senderConfig.email}>`;
        console.log(`Отправка письма: FROM [${fromString}] TO [${to}]`);

        const info = await transporter.sendMail({
            from: fromString,
            to,
            subject,
            html,
        });

        console.log('Письмо отправлено. Message ID:', info.messageId);
        return info;
    } catch (error) {
        console.error('Ошибка в sendEmail:', error);
        throw error; // Пробрасываем ошибку, чтобы её поймал API роут
    }
};

// Функция проверки соединения (можно вызывать при старте сервера, если нужно)
export const verifyConnection = async () => {
    try {
        await transporter.verify();
        console.log('SMTP сервер готов к приему сообщений');
        return true;
    } catch (error) {
        console.error('Ошибка подключения к SMTP:', error);
        return false;
    }
};