import type { NextApiRequest, NextApiResponse } from 'next';
import { sendEmail } from '@/lib/mail';
import {
  orderConfirmationTemplate,
  registrationEmailTemplate,
  orderRecapEmailTemplate,
  paymentInitializationTemplate,
  paymentSuccessTemplate,
  paymentCancellationTemplate
} from '@/lib/emailTemplates';

interface SendEmailRequest {
  templateName: string;
  params: any;
}

interface ApiResponse {
  success: boolean;
  message: string;
  error?: string;
}

export default async function handler(
  req: NextApiRequest,
  res: NextApiResponse<ApiResponse>
) {
  if (req.method !== 'POST') {
    return res.status(405).json({
      success: false,
      message: 'Metoda není povolena',
      error: 'Použij POST request',
    });
  }

  try {
    const { templateName, params } = req.body as SendEmailRequest;

    if (!templateName || !params) {
      return res.status(400).json({
        success: false,
        message: 'Chybí povinné parametry',
        error: 'Vyžadováno: templateName a params',
      });
    }

    let emailContent: any;

    // Mapování názvů z frontendu na funkce v emailTemplates.ts
    switch (templateName) {
      case 'orderConfirmationTemplate': // Opravený název (shoduje se s frontendem)
        emailContent = orderConfirmationTemplate({
          customerEmail: params.customerEmail,
          orderNumber: params.orderNumber,
          voucherCodes: params.voucherCodes || [],
        });
        break;

      case 'registrationEmailTemplate':
        emailContent = registrationEmailTemplate(
          params.customerEmail, 
          params.firstName, 
          params.lastName
        );
        break;

      case 'orderRecapEmailTemplate':
        emailContent = orderRecapEmailTemplate(params.customerEmail, {
          orderNumber: params.orderNumber,
          createdAt: new Date(),
          items: [
            { name: 'Testovací položka 1', quantity: 1, unitPrice: 500, lineTotal: 500 },
            { name: 'Testovací položka 2', quantity: 2, unitPrice: 250, lineTotal: 500 }
          ],
          shippingPrice: 100,
          total: parseFloat(params.total) || 1100,
          currency: params.currency || 'CZK',
          shippingMethod: 'Zásilkovna',
          billingName: `${params.firstName} ${params.lastName}`,
          billingAddress: {
            street: 'Testovací ulice 123',
            city: 'Praha',
            zip: '110 00',
          },
        });
        break;

      case 'paymentInitializationTemplate':
        emailContent = paymentInitializationTemplate({
          customerEmail: params.customerEmail,
          firstName: params.firstName,
          lastName: params.lastName,
          orderNumber: params.orderNumber,
          amount: parseFloat(params.amount) || 0,
          currency: params.currency || 'CZK',
          paymentUrl: params.paymentUrl,
        });
        break;

      case 'paymentSuccessTemplate':
        emailContent = paymentSuccessTemplate({
          customerEmail: params.customerEmail,
          firstName: params.firstName,
          lastName: params.lastName,
          orderNumber: params.orderNumber,
          amount: parseFloat(params.amount) || 0,
          currency: params.currency || 'CZK',
          paymentDate: params.paymentDate ? new Date(params.paymentDate) : new Date(),
        });
        break;

      case 'paymentCancellationTemplate':
        emailContent = paymentCancellationTemplate({
          customerEmail: params.customerEmail,
          firstName: params.firstName,
          lastName: params.lastName,
          orderNumber: params.orderNumber,
          amount: parseFloat(params.amount) || 0,
          currency: params.currency || 'CZK',
        });
        break;

      default:
        return res.status(400).json({
          success: false,
          message: 'Neznámý template',
          error: `Template '${templateName}' neexistuje v API switchi`,
        });
    }

    // Odešli email přes lib/mail.ts
    await sendEmail(emailContent);

    return res.status(200).json({
      success: true,
      message: `Email (${templateName}) odeslán na ${emailContent.to}`,
    });
  } catch (error) {
    return res.status(500).json({
      success: false,
      message: 'Chyba při odesílání emailu',
      error: error instanceof Error ? error.message : 'Neznámá chyba',
    });
  }
}
