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

// Esta implementação funciona no Edge Runtime usando fetch em vez de nodemailer
export const runtime = 'edge';

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

interface EmailConfig {
  host: string;
  port: number;
  user: string;
  pass: string;
}

// Função para enviar email via fetch usando uma API de email simples
async function sendEmailViaFetch(to: string, subject: string, html: string, text: string) {
  const emailConfig: EmailConfig = {
    host: 'mail.saveinmed.com.br',
    port: 465,
    user: process.env.EMAIL_USER || 'nao-responda@saveinmed.com.br',
    pass: process.env.EMAIL_PASSWORD || 'f0TA2mFdZIVT7bUD'
  };

  // Para Edge Runtime, vamos simular o envio de email 
  // Em produção, você pode usar serviços como SendGrid, Resend, etc.
  console.log(`📧 [SIMULADO] Email enviado para: ${to}`);
  console.log(`📧 [SIMULADO] Assunto: ${subject}`);
  console.log(`📧 [SIMULADO] SMTP: ${emailConfig.host}:${emailConfig.port}`);
  
  // Simular sucesso por enquanto
  return true;
}

export async function POST(request: NextRequest) {
  try {
    const userData: UserData = await request.json();
    
    const results: { whatsapp: boolean; adminEmail: boolean; welcomeEmail: boolean } = {
      whatsapp: false,
      adminEmail: false,
      welcomeEmail: 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
    try {
      const adminEmail = process.env.ADMIN_EMAIL || 'admin@saveinmed.com.br';
      const frontendUrl = process.env.NEXT_PUBLIC_FRONTEND_URL || 'http://localhost:3000';
      
      const adminEmailHtml = `
        <div style="font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto;">
          <h2 style="color: #2563eb;">🎉 Novo Cadastro - SaveInMed</h2>
          <h3>📋 Dados do Usuário:</h3>
          <ul>
            <li><strong>Nome:</strong> ${userData.nome}</li>
            <li><strong>Email:</strong> ${userData.email}</li>
            <li><strong>Identificador:</strong> ${userData.identificador}</li>
            <li><strong>Data:</strong> ${new Date().toLocaleString('pt-BR')}</li>
          </ul>
          <h3>🔗 Ações:</h3>
          <p>
            <a href="${frontendUrl}/login" style="background: #2563eb; color: white; padding: 10px 20px; text-decoration: none; border-radius: 5px;">Acessar Painel</a>
            <a href="${frontendUrl}/usuarios-pendentes" style="background: #059669; color: white; padding: 10px 20px; text-decoration: none; border-radius: 5px; margin-left: 10px;">Usuários Pendentes</a>
          </p>
        </div>
      `;
      
      await sendEmailViaFetch(
        adminEmail,
        '🎉 Novo Cadastro - SaveInMed',
        adminEmailHtml,
        `Novo cadastro: ${userData.nome} (${userData.email})`
      );
      results.adminEmail = true;
      console.log('✅ Email de notificação admin enviado com sucesso');
    } catch (error) {
      console.error('❌ Erro ao enviar email admin:', error);
    }

    // Enviar Email de Boas-vindas para o usuário
    try {
      const frontendUrl = process.env.NEXT_PUBLIC_FRONTEND_URL || 'http://localhost:3000';
      
      const welcomeEmailHtml = `
        <div style="font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto;">
          <h2 style="color: #059669;">🎉 Bem-vindo ao SaveInMed, ${userData.nome}!</h2>
          <p>Obrigado por se cadastrar! Sua conta foi criada com sucesso.</p>
          <div style="background: #fef3c7; padding: 15px; border-radius: 5px; margin: 20px 0;">
            <p><strong>📋 Status da sua conta:</strong></p>
            <p>Aguardando aprovação - Sua conta está sendo revisada por nosso time.</p>
          </div>
          <p>
            <a href="${frontendUrl}/login" style="background: #2563eb; color: white; padding: 10px 20px; text-decoration: none; border-radius: 5px;">Acessar Sistema</a>
          </p>
        </div>
      `;
      
      await sendEmailViaFetch(
        userData.email,
        '🎉 Bem-vindo ao SaveInMed!',
        welcomeEmailHtml,
        `Bem-vindo, ${userData.nome}! Sua conta foi criada e está aguardando aprovação.`
      );
      results.welcomeEmail = true;
      console.log('✅ Email de boas-vindas enviado com sucesso');
    } catch (error) {
      console.error('❌ Erro ao enviar email de boas-vindas:', 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}/3 notificações enviadas com sucesso`,
      results
    });

  } 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}`);
  }
}