const nodemailer = require('nodemailer'); let db; let settingsModule; function init(database, settings) { db = database; settingsModule = settings; } function getSettings(callback) { settingsModule.getAll((err, all) => { if (err) return callback(err); callback(null, all); }); } function createTransport(settings, callback) { if (!settings.smtp_host) return callback(new Error('SMTP host not configured')); const transport = nodemailer.createTransport({ host: settings.smtp_host, port: parseInt(settings.smtp_port) || 587, secure: settings.smtp_secure === 'true', auth: { user: settings.smtp_user || '', pass: settings.smtp_pass || '' } }); callback(null, transport); } function sendTestEmail(settings, to, callback) { createTransport(settings, (err, transport) => { if (err) return callback(err); transport.sendMail({ from: settings.smtp_from || settings.smtp_user, to: to, subject: 'Hotel 777 — Тестовое письмо', html: `

Hotel 777

Это тестовое письмо. Настройки SMTP работают корректно.

Отправлено: ${new Date().toLocaleString('ru-RU')}

` }, (err, info) => { callback(err, info); }); }); } function sendBookingConfirmation(booking) { if (!booking.phone) return; getSettings((err, settings) => { if (err || settings.email_notifications_enabled !== 'true') return; createTransport(settings, (err, transport) => { if (err) { console.error('Email transport error:', err.message); return; } transport.sendMail({ from: settings.smtp_from || settings.smtp_user, to: settings.admin_email || settings.smtp_user, subject: `Новая бронь: ${booking.name} — ${booking.room_type || 'Номер'} — с ${booking.checkin_date}`, html: `

Hotel 777 — Новая бронь

${booking.wishes ? `` : ''}
Имя:${booking.name}
Телефон:${booking.phone}
Номер:${booking.room_type || '—'}
Гостей:${booking.adults} взр.${booking.children ? ', ' + booking.children + ' дет.' : ''}
Заезд:${booking.checkin_date}
Выезд:${booking.checkout_date}
Сумма:${booking.total_price || booking.base_price || 0} ₽
Пожелания:${booking.wishes}

Зайдите в админ-панель для управления бронью.

` }, (err) => { if (err) console.error('Booking confirmation email error:', err.message); }); }); }); } function sendStatusChange(booking, oldStatus, newStatus) { getSettings((err, settings) => { if (err || settings.email_notifications_enabled !== 'true') return; if (oldStatus === newStatus) return; createTransport(settings, (err, transport) => { if (err) { console.error('Email transport error:', err.message); return; } transport.sendMail({ from: settings.smtp_from || settings.smtp_user, to: settings.admin_email || settings.smtp_user, subject: `Статус брони #${booking.id} изменён: ${oldStatus} → ${newStatus}`, html: `

Hotel 777 — Изменение статуса

Бронь #${booking.id} — ${booking.name}

Статус изменён: ${oldStatus} → ${newStatus}

${new Date().toLocaleString('ru-RU')}

` }, (err) => { if (err) console.error('Status change email error:', err.message); }); }); }); } function setupRoutes(app, authenticateToken, requireAdmin) { } module.exports = { init, setupRoutes, sendTestEmail, sendBookingConfirmation, sendStatusChange, getSettings };