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

// Cloudflare Pages / Edge hosts esperam rotas não-estáticas rodando no runtime 'edge'.
export const runtime = 'edge';

let _resendClient: any | null = null;
function getResendClient() {
  if (_resendClient) return _resendClient;

  const apiKey = process.env.RESEND_API_KEY;
  if (!apiKey) {
    // Lançar um erro controlado para que o caller trate e o build não quebre silenciosamente.
    throw new Error('Missing RESEND_API_KEY. Set RESEND_API_KEY in your environment to enable email sending.');
  }

  // Instanciar somente quando a chave existir (evita erro de build quando a env não está definida no momento de bundling)
  // A import do pacote é segura em runtime edge (usado em outras rotas do projeto).
  _resendClient = new Resend(apiKey);
  return _resendClient;
}

export async function POST(request: NextRequest) {
  try {
    const { type = 'connection' } = await request.json();

    // Caso de "connection": checamos se a chave do Resend está presente e opcionalmente tentamos enviar um email de teste
    if (type === 'connection') {
      try {
        const resend = getResendClient();
        const to = process.env.RESEND_TEST_EMAIL;
        if (!to) {
          return NextResponse.json({
            success: false,
            message: 'RESEND_TEST_EMAIL não está configurado. Defina essa variável para testar envio.'
          }, { status: 400 });
        }

        // Enviar um e-mail mínimo para validar a integração
        await resend.emails.send({
          from: process.env.RESEND_FROM || 'onboarding@resend.dev',
          to,
          subject: 'Teste de conexão SaveInMed',
          html: `<p>Teste de conexão ao serviço de email (Resend). Se você recebeu este email, a integração funciona.</p>`
        });

        return NextResponse.json({
          success: true,
          message: 'Envio de teste realizado (Resend). Verifique a caixa de entrada do email de teste.'
        });
      } catch (err: any) {
        console.error('Erro ao testar conexão Resend:', err?.message || err);
        return NextResponse.json({
          success: false,
          message: 'Falha ao testar Resend',
          error: err instanceof Error ? err.message : String(err)
        }, { status: 500 });
      }
    }

    if (type === 'admin-email') {
      const testUserData = {
        nome: 'Usuário Teste',
        email: 'teste@exemplo.com',
        identificador: 'teste@exemplo.com'
      };

      try {
        const resend = getResendClient();
        const adminEmail = process.env.ADMIN_EMAIL;
        if (!adminEmail) {
          return NextResponse.json({ success: false, message: 'ADMIN_EMAIL não configurado.' }, { status: 400 });
        }

        await resend.emails.send({
          from: process.env.RESEND_FROM || 'onboarding@resend.dev',
          to: adminEmail,
          subject: 'Teste: Notificação de novo usuário (SaveInMed)',
          html: `<p>Notificação de teste para admin. Usuário: <strong>${testUserData.nome}</strong> (${testUserData.email})</p>`
        });

        return NextResponse.json({
          success: true,
          message: 'Email de teste para admin enviado com sucesso!',
          testData: testUserData
        });
      } catch (err: any) {
        console.error('Erro ao enviar email para admin via Resend:', err?.message || err);
        return NextResponse.json({ success: false, message: 'Erro ao enviar email para admin', error: err instanceof Error ? err.message : String(err) }, { status: 500 });
      }
    }

    // Fornece compatibilidade com o caso de welcome-email se ainda for necessário
    if (type === 'welcome-email') {
      const testUserData = {
        nome: 'Usuário Teste',
        email: process.env.ADMIN_EMAIL || 'admin@saveinmed.com.br',
        identificador: 'teste@exemplo.com'
      };

      try {
        const resend = getResendClient();
        await resend.emails.send({
          from: process.env.RESEND_FROM || 'onboarding@resend.dev',
          to: testUserData.email,
          subject: 'Teste: Boas-vindas SaveInMed',
          html: `<p>Este é um email de boas-vindas de teste para <strong>${testUserData.nome}</strong>.</p>`
        });

        return NextResponse.json({ success: true, message: 'Email de boas-vindas enviado com sucesso!', testData: testUserData });
      } catch (err: any) {
        console.error('Erro ao enviar welcome email via Resend:', err?.message || err);
        return NextResponse.json({ success: false, message: 'Erro ao enviar welcome email', error: err instanceof Error ? err.message : String(err) }, { status: 500 });
      }
    }

    return NextResponse.json({
      success: false,
      message: 'Tipo de teste inválido. Use: connection, admin-email ou welcome-email'
    }, { status: 400 });

  } catch (error: any) {
    console.error('❌ Erro no teste de email (rota edge):', error?.message || error);
    return NextResponse.json({
      success: false,
      message: 'Erro no teste de email',
      error: error instanceof Error ? error.message : String(error)
    }, { status: 500 });
  }
}