import { NextRequest, NextResponse } from 'next/server';
import { Resend } from 'resend';

// Resend funciona perfeitamente no Edge Runtime
export const runtime = 'edge';

interface UserData {
  nome: string;
  email: string;
  identificador: string;
}

// Função para inicializar Resend apenas quando necessário
function getResendClient() {
  const apiKey = process.env.RESEND_API_KEY;
  if (!apiKey) {
    console.error('❌ RESEND_API_KEY não está configurada nas variáveis de ambiente');
    throw new Error('RESEND_API_KEY não está configurada nas variáveis de ambiente');
  }
  return new Resend(apiKey);
}

export async function POST(request: NextRequest) {
  try {
    const userData: UserData = await request.json();
    
    const results: { whatsapp: boolean; adminEmail: boolean } = {
      whatsapp: false,
      adminEmail: false
    };

    // Enviar WhatsApp
    try {
      await sendWhatsAppNotification(userData);
      results.whatsapp = true;
      console.log('✅ Notificação WhatsApp enviada com sucesso');
    } catch (error) {
      console.error('❌ Erro ao enviar WhatsApp:', error);
    }

    // Enviar Email para Admin usando Resend
    try {
      // Para modo teste do Resend, usar o email autorizado da conta
      const adminEmail = process.env.RESEND_TEST_EMAIL || 'gladistone.cabobo20@gmail.com'; // Email autorizado no Resend
      const frontendUrl = process.env.NEXT_PUBLIC_FRONTEND_URL || 'http://localhost:3000';
      
      // Inicializar Resend apenas quando necessário
      const resend = getResendClient();
      
      const { data, error } = await resend.emails.send({
        from: 'SaveInMed <nao-responda@saveinmed.com.br>', // Usando domínio padrão do Resend
        to: [adminEmail],
        subject: '🎉 Novo Cadastro - SaveInMed',
        html: `
          <div style="font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto; padding: 20px; background-color: #f9f9f9;">
            <div style="background-color: white; padding: 30px; border-radius: 10px; box-shadow: 0 2px 10px rgba(0,0,0,0.1);">
              
              <!-- Header -->
              <div style="text-align: center; margin-bottom: 30px;">
                <h1 style="color: #2563eb; font-size: 28px; margin: 0;">SaveInMed</h1>
                <p style="color: #6b7280; font-size: 16px; margin: 5px 0 0 0;">Sistema de Gestão Farmacêutica</p>
              </div>

              <!-- Título Principal -->
              <div style="text-align: center; margin-bottom: 30px;">
                <h2 style="color: #059669; font-size: 24px; margin: 0;">🎉 Novo Cadastro Realizado</h2>
              </div>

              <!-- Dados do Usuário -->
              <div style="background-color: #f3f4f6; padding: 20px; border-radius: 8px; margin-bottom: 25px;">
                <h3 style="color: #374151; font-size: 18px; margin: 0 0 15px 0;">📋 Dados do Usuário:</h3>
                <table style="width: 100%; border-collapse: collapse;">
                  <tr>
                    <td style="padding: 8px 0; color: #6b7280; font-weight: bold; width: 120px;">Nome:</td>
                    <td style="padding: 8px 0; color: #374151;">${userData.nome}</td>
                  </tr>
                  <tr>
                    <td style="padding: 8px 0; color: #6b7280; font-weight: bold;">Email:</td>
                    <td style="padding: 8px 0; color: #374151;">${userData.email}</td>
                  </tr>
                  <tr>
                    <td style="padding: 8px 0; color: #6b7280; font-weight: bold;">Identificador:</td>
                    <td style="padding: 8px 0; color: #374151;">${userData.identificador}</td>
                  </tr>
                  <tr>
                    <td style="padding: 8px 0; color: #6b7280; font-weight: bold;">Data:</td>
                    <td style="padding: 8px 0; color: #374151;">${new Date().toLocaleString('pt-BR')}</td>
                  </tr>
                </table>
              </div>

              <!-- Ações Rápidas -->
              <div style="margin-bottom: 25px;">
                <h3 style="color: #374151; font-size: 18px; margin: 0 0 15px 0;">🔗 Ações Rápidas:</h3>
                <div style="text-align: center;">
                  <a href="${frontendUrl}/login" 
                     style="display: inline-block; background-color: #2563eb; color: white; padding: 12px 24px; text-decoration: none; border-radius: 6px; margin: 5px; font-weight: bold;">
                    🔑 Acessar Painel
                  </a>
                  <a href="${frontendUrl}/usuarios-pendentes" 
                     style="display: inline-block; background-color: #059669; color: white; padding: 12px 24px; text-decoration: none; border-radius: 6px; margin: 5px; font-weight: bold;">
                    👥 Usuários Pendentes
                  </a>
                </div>
              </div>

              <!-- Footer -->
              <div style="text-align: center; padding-top: 20px; border-top: 1px solid #e5e7eb;">
                <p style="color: #6b7280; font-size: 12px; margin: 0;">
                  Notificação automática do sistema SaveInMed<br>
                  Este email foi enviado automaticamente, não responda.
                </p>
              </div>

            </div>
          </div>
        `
      });

      if (error) {
        throw new Error(`Erro do Resend: ${error.message}`);
      }

      results.adminEmail = true;
      console.log('✅ Email de notificação admin enviado com sucesso via Resend');
    } catch (error) {
      console.error('❌ Erro ao enviar email admin:', error);
    }

    // Verificar se pelo menos uma notificação foi enviada
    const successCount = Object.values(results).filter(Boolean).length;
    
    if (successCount === 0) {
      return NextResponse.json(
        { 
          success: false, 
          message: 'Erro ao enviar todas as notificações',
          results
        },
        { status: 500 }
      );
    }

    return NextResponse.json({ 
      success: true, 
      message: `${successCount}/2 notificações enviadas com sucesso`,
      results,
      service: 'resend',
      timestamp: new Date().toISOString()
    });

  } catch (error) {
    console.error('❌ Erro geral ao enviar notificações:', error);
    return NextResponse.json(
      { 
        success: false, 
        message: 'Erro interno do servidor',
        error: error instanceof Error ? error.message : 'Erro desconhecido'
      },
      { status: 500 }
    );
  }
}

async function sendWhatsAppNotification(userData: UserData) {
  const evolutionApiUrl = process.env.EVOLUTION_API_URL;
  const evolutionApiKey = process.env.EVOLUTION_API_KEY;
  const instanceName = process.env.EVOLUTION_INSTANCE_NAME;
  const adminWhatsApp = process.env.ADMIN_WHATSAPP;
  const frontendUrl = process.env.NEXT_PUBLIC_FRONTEND_URL || 'http://localhost:3000';

  if (!evolutionApiUrl || !evolutionApiKey || !instanceName || !adminWhatsApp) {
    throw new Error('Configurações do WhatsApp não encontradas');
  }

  const message = `🎉 *Novo Cadastro - SaveInMed*

📋 *Dados do Usuário:*
• Nome: ${userData.nome}
• Email: ${userData.email}
• Identificador: ${userData.identificador}
• Data: ${new Date().toLocaleString('pt-BR')}

🔗 *Ações:*
• Acessar painel: ${frontendUrl}/login
• Usuários Pendentes: ${frontendUrl}/usuarios-pendentes

_Notificação automática do sistema SaveInMed_`;

  const response = await fetch(`${evolutionApiUrl}/message/sendText/${instanceName}`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'apikey': evolutionApiKey,
    },
    body: JSON.stringify({
      number: adminWhatsApp,
      text: message,
    }),
  });

  if (!response.ok) {
    const errorText = await response.text();
    throw new Error(`Erro ao enviar WhatsApp: ${response.status} - ${errorText}`);
  }
}