import { sendEmail } from '@/lib/emailService';
import { readFile } from 'node:fs/promises';
import { fileURLToPath } from 'node:url';
import { dirname, join } from 'node:path';

interface CarDetails {
  make: string;
  model: string;
  year: string;
  price: string;
}

interface BookingRequest {
  carDetails?: CarDetails;
  discount?: string;
  formType?: 'main' | 'slider' | 'action' | 'premium';
  pickup: string;
  pickupDate: string;
  pickupTime: string;
  dropoff: string;
  dropoffDate: string;
  dropoffTime: string;
  passengers: string;
  phone: string;
  name: string;
  additionalInfo?: string;
}

// Функция для замены плейсхолдеров в HTML-шаблоне
const fillTemplate = (template: string, data: Record<string, string>) => {
  let filledTemplate = template;
  for (const [key, value] of Object.entries(data)) {
    filledTemplate = filledTemplate.replace(new RegExp(`{${key}}`, 'g'), value || 'N/A');
  }
  return filledTemplate;
};

// Получаем директорию текущего модуля
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);

// Читаем HTML-шаблон из файла
const loadTemplate = async (templateName: string = 'booking-request-template.html'): Promise<string> => {
  try {
    // Строим путь к файлу шаблона
    const templatePath = join(__dirname, '..', '..', 'emails', templateName);
    const templateContent = await readFile(templatePath, 'utf-8');
    return templateContent;
  } catch (error) {
    console.error('Fehler beim Laden des Templates:', error);
    // Возвращаем встроенный шаблон в случае ошибки (по умолчанию с синей схемой)
    return `<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Neue Buchungsanfrage</title>
</head>
<body style="margin: 0; padding: 0; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; background-color: #f3f4f6; color: #1f2937;">

  <!-- Главный контейнер -->
  <table role="presentation" width="100%" border="0" cellspacing="0" cellpadding="0" style="background-color: #f3f4f6; padding: 40px 0;">
    <tr>
      <td align="center">

        <!-- Карточка -->
        <table role="presentation" width="600" border="0" cellspacing="0" cellpadding="0" style="background-color: #ffffff; border-radius: 12px; box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1); max-width: 100%; overflow: hidden; border: 1px solid #e5e7eb;">

          <!-- Шапка -->
          <tr>
            <td style="background: linear-gradient(135deg, #2563eb, #1d4ed8); padding: 40px 40px 20px 40px; text-align: center; color: white;">
              <h1 style="margin: 0; font-size: 24px; font-weight: 800; letter-spacing: -0.5px; text-transform: uppercase;">
                MINIVAN <span style="color: #ffffff;">BERLIN</span>
              </h1>
              <h2 style="margin: 10px 0 0 0; font-size: 20px; font-weight: 600; color: #ffffff;">Neue Buchungsanfrage</h2>
            </td>
          </tr>

          <!-- Основной контейнер контента -->
          <tr>
            <td style="padding: 40px 40px;">

              <!-- Карточка с информацией о транспорте и скидке -->
              <table role="presentation" border="0" cellspacing="0" cellpadding="0" style="width: 100%; background-color: #dbeafe; border-left: 4px solid #2563eb; border-radius: 6px; padding: 16px;">
                <tr>
                  <td style="padding: 0;">
                    <table role="presentation" border="0" cellspacing="0" cellpadding="0" style="width: 100%;">
                      <tr>
                        <td style="width: 50%; padding: 4px 8px;">
                          <p style="margin: 0; font-size: 14px; font-weight: 600; color: #6b7280; text-transform: uppercase; letter-spacing: 0.05em;">Fahrzeug</p>
                          <p style="margin: 4px 0 0 0; font-size: 16px; font-weight: 600; color: #1f2937;">{carDetails}</p>
                        </td>
                        <td style="width: 50%; padding: 4px 8px;">
                          <p style="margin: 0; font-size: 14px; font-weight: 600; color: #6b7280; text-transform: uppercase; letter-spacing: 0.05em;">Rabatt</p>
                          <p style="margin: 4px 0 0 0; font-size: 16px; font-weight: 600; color: #1f2937;">{discount}</p>
                        </td>
                      </tr>
                    </table>
                  </td>
                </tr>
              </table>

              <!-- Информация об отъезде -->
              <table role="presentation" border="0" cellspacing="0" cellpadding="0" style="width: 100%; background-color: #eff6ff; border-left: 4px solid #2563eb; border-radius: 6px; padding: 16px; margin: 16px 0;">
                <tr>
                  <td style="padding: 0;">
                    <table role="presentation" border="0" cellspacing="0" cellpadding="0" style="width: 100%;">
                      <tr>
                        <td style="width: 50%; padding: 8px;">
                          <p style="margin: 0; font-size: 14px; font-weight: 600; color: #6b7280; text-transform: uppercase; letter-spacing: 0.05em;">Abholung</p>
                          <p style="margin: 4px 0 0 0; font-size: 16px; font-weight: 600; color: #1f2937;">{pickupDate} um {pickupTime}</p>
                        </td>
                        <td style="width: 50%; padding: 8px;">
                          <p style="margin: 0; font-size: 14px; font-weight: 600; color: #6b7280; text-transform: uppercase; letter-spacing: 0.05em;">Von</p>
                          <p style="margin: 4px 0 0 0; font-size: 16px; font-weight: 600; color: #1f2937;">{pickup}</p>
                        </td>
                      </tr>
                    </table>
                  </td>
                </tr>
              </table>

              <!-- Информация о прибытии -->
              <table role="presentation" border="0" cellspacing="0" cellpadding="0" style="width: 100%; background-color: #eff6ff; border-left: 4px solid #2563eb; border-radius: 6px; padding: 16px; margin: 16px 0;">
                <tr>
                  <td style="padding: 0;">
                    <table role="presentation" border="0" cellspacing="0" cellpadding="0" style="width: 100%;">
                      <tr>
                        <td style="width: 50%; padding: 8px;">
                          <p style="margin: 0; font-size: 14px; font-weight: 600; color: #6b7280; text-transform: uppercase; letter-spacing: 0.05em;">Rückgabe</p>
                          <p style="margin: 4px 0 0 0; font-size: 16px; font-weight: 600; color: #1f2937;">{dropoffDate} um {dropoffTime}</p>
                        </td>
                        <td style="width: 50%; padding: 8px;">
                          <p style="margin: 0; font-size: 14px; font-weight: 600; color: #6b7280; text-transform: uppercase; letter-spacing: 0.05em;">Nach</p>
                          <p style="margin: 4px 0 0 0; font-size: 16px; font-weight: 600; color: #1f2937;">{dropoff}</p>
                        </td>
                      </tr>
                    </table>
                  </td>
                </tr>
              </table>

              <!-- Разделитель -->
              <table role="presentation" border="0" cellspacing="0" cellpadding="0" style="width: 100%; margin: 20px 0;">
                <tr>
                  <td style="border-bottom: 1px solid #e5e7eb; height: 1px; font-size: 0;"></td>
                </tr>
              </table>

              <!-- Контактная информация -->
              <table role="presentation" border="0" cellspacing="0" cellpadding="0" style="width: 100%;">
                <tr>
                  <td style="width: 50%; padding: 4px 8px;">
                    <p style="margin: 0; font-size: 14px; font-weight: 600; color: #6b7280; text-transform: uppercase; letter-spacing: 0.05em;">Passagiere</p>
                    <p style="margin: 4px 0 0 0; font-size: 16px; font-weight: 600; color: #1f2937;">{passengers}</p>
                  </td>
                  <td style="width: 50%; padding: 4px 8px;">
                    <p style="margin: 0; font-size: 14px; font-weight: 600; color: #6b7280; text-transform: uppercase; letter-spacing: 0.05em;">Name</p>
                    <p style="margin: 4px 0 0 0; font-size: 16px; font-weight: 600; color: #1f2937;">{name}</p>
                  </td>
                </tr>
              </table>

              <table role="presentation" border="0" cellspacing="0" cellpadding="0" style="width: 100%; margin: 16px 0;">
                <tr>
                  <td style="width: 100%; padding: 4px 8px;">
                    <p style="margin: 0; font-size: 14px; font-weight: 600; color: #6b7280; text-transform: uppercase; letter-spacing: 0.05em;">Telefon</p>
                    <p style="margin: 4px 0 0 0; font-size: 16px; font-weight: 600; color: #1f2937;">{phone}</p>
                  </td>
                </tr>
              </table>

              <table role="presentation" border="0" cellspacing="0" cellpadding="0" style="width: 100%; background-color: #f8fafc; border-radius: 6px; padding: 16px;">
                <tr>
                  <td style="padding: 0;">
                    <p style="margin: 0; font-size: 14px; font-weight: 600; color: #6b7280; text-transform: uppercase; letter-spacing: 0.05em;">Zusätzliche Informationen</p>
                    <p style="margin: 8px 0 0 0; font-size: 16px; font-weight: 400; color: #1f2937;">{additionalInfo}</p>
                  </td>
                </tr>
              </table>

            </td>
          </tr>

          <!-- Подвал -->
          <tr>
            <td style="background-color: #f9fafb; padding: 24px; text-align: center; font-size: 12px; color: #9ca3af; border-top: 1px solid #e5e7eb;">
              <p style="margin: 0 0 8px 0;">&copy; Minivan Berlin Transfers.</p>
              <p style="margin: 0;">
                Diese Nachricht wurde über das Buchungsformular auf Ihrer Website gesendet.
              </p>
            </td>
          </tr>

        </table>

        <!-- Отступ снизу -->
        <table role="presentation" border="0" cellspacing="0" cellpadding="0" style="height: 40px;"><tr><td></td></tr></table>

      </td>
    </tr>
  </table>

</body>
</html>`;
  }
};

export async function POST({ request }: { request: Request }) {
  try {
    console.log('Начало обработки запроса на отправку бронирования');

    const bookingData: BookingRequest = await request.json();
    console.log('Данные бронирования получены:', bookingData);

    // Получаем email администратора из переменных окружения
    const adminEmail = import.meta.env.ADMIN_EMAIL || import.meta.env.SENDER_EMAIL;
    console.log('Email администратора:', adminEmail);
    console.log('ADMIN_EMAIL:', process.env.ADMIN_EMAIL);
    console.log('SENDER_EMAIL:', process.env.SENDER_EMAIL);
    console.log('MAIL_FROM:', process.env.MAIL_FROM);

    if (!adminEmail) {
      console.error('Не указан email администратора (проверьте ADMIN_EMAIL, SENDER_EMAIL или MAIL_FROM в .env)');
      return new Response(
        JSON.stringify({ error: 'Не указан email администратора' }),
        { status: 500, headers: { 'Content-Type': 'application/json' } }
      );
    }

    // Определяем тип формы и соответствующий шаблон
    const formType = bookingData.formType || 'main';
    console.log('Тип формы:', formType);

    // Загружаем соответствующий шаблон письма
    let template: string;

    switch(formType) {
      case 'slider':
        console.log('Загрузка шаблона для слайдера');
        template = await loadTemplate('booking-request-template-slider.html');
        break;
      case 'action':
        console.log('Загрузка шаблона для акции');
        template = await loadTemplate('booking-request-template-action.html');
        break;
      case 'premium':
        console.log('Загрузка шаблона для премиальных автомобилей');
        template = await loadTemplate('booking-request-template-premium.html');
        break;
      case 'main':
      default:
        console.log('Загрузка основного шаблона');
        template = await loadTemplate('booking-request-template.html');
        break;
    }

    console.log('Шаблон успешно загружен, длина:', template.length);

    // Подготавливаем данные для шаблона
    const emailData: Record<string, string> = {
      carDetails: bookingData.carDetails
        ? `${bookingData.carDetails.make} ${bookingData.carDetails.model} (${bookingData.carDetails.year})`
        : 'Nicht ausgewählt',
      discount: bookingData.discount || 'Kein Rabatt',
      pickup: bookingData.pickup,
      pickupDate: bookingData.pickupDate,
      pickupTime: bookingData.pickupTime,
      dropoff: bookingData.dropoff,
      dropoffDate: bookingData.dropoffDate,
      dropoffTime: bookingData.dropoffTime,
      passengers: bookingData.passengers,
      phone: bookingData.phone,
      name: bookingData.name,
      additionalInfo: bookingData.additionalInfo || 'Keine zusätzlichen Informationen'
    };

    console.log('Данные для шаблона подготовлены:', emailData);

    // Заполняем шаблон данными
    const htmlContent = fillTemplate(template, emailData);
    console.log('Шаблон заполнен, длина содержимого:', htmlContent.length);

    // Отправляем письмо
    console.log('Начало отправки письма на адрес:', adminEmail);
    await sendEmail(adminEmail, 'Neue Buchungsanfrage - Berlin Minivan Transfers', htmlContent);
    console.log('Письмо успешно отправлено');

    // Возвращаем успешный ответ
    return new Response(
      JSON.stringify({ message: 'Buchungsanfrage erfolgreich gesendet' }),
      { status: 200, headers: { 'Content-Type': 'application/json' } }
    );
  } catch (error) {
    console.error('Fehler beim Senden der Buchungsanfrage:', error);
    console.error('Тип ошибки:', typeof error);
    console.error('Сообщение об ошибке:', error instanceof Error ? error.message : String(error));
    console.error('Стек вызовов:', error instanceof Error ? error.stack : 'N/A');

    return new Response(
      JSON.stringify({
        error: 'Fehler beim Senden der Anfrage',
        details: error instanceof Error ? error.message : String(error)
      }),
      { status: 500, headers: { 'Content-Type': 'application/json' } }
    );
  }
}