/**
 * Script para testar envio de e-mail
 * Uso: bun scripts/test-email.ts [destinatario]
 */

import { sendSmtpMail } from "../src/server/email-smtp"
import { renderTemplate } from "../src/server/email/email-templates"

const DESTINATARIO = process.argv[2] || "renan.pac@paulicon.com.br"

// Credenciais do SMTP (usando as da documentacao)
const smtpConfig = {
  host: "smtp.c.inova.com.br",
  port: 587,
  username: "envio@rever.com.br",
  password: "CAAJQm6ZT6AUdhXRTDYu",
  from: '"Sistema de Chamados" <envio@rever.com.br>',
  starttls: true,
  tls: false,
  rejectUnauthorized: false,
  timeoutMs: 15000,
}

async function testEmail() {
  console.log("=".repeat(50))
  console.log("TESTE DE ENVIO DE E-MAIL")
  console.log("=".repeat(50))
  console.log(`Destinatario: ${DESTINATARIO}`)
  console.log(`SMTP: ${smtpConfig.host}:${smtpConfig.port}`)
  console.log("")

  // 1. Teste basico
  console.log("[1/10] Enviando e-mail de teste basico...")
  try {
    const html = renderTemplate("test", {
      title: "Teste do Sistema de E-mail",
      message: "Este e-mail confirma que o sistema de notificacoes esta funcionando corretamente.",
      timestamp: new Date().toLocaleString("pt-BR", { timeZone: "America/Sao_Paulo" }),
    })

    await sendSmtpMail(smtpConfig, DESTINATARIO, "Teste - Sistema de Chamados Raven", html)
    console.log("   SUCESSO!")
  } catch (error) {
    console.error("   ERRO:", (error as Error).message)
  }

  // 2. Teste de abertura de chamado
  console.log("\n[2/10] Enviando notificacao de abertura de chamado...")
  try {
    const html = renderTemplate("ticket_created", {
      reference: 12345,
      subject: "Problema no sistema de vendas",
      status: "PENDING",
      priority: "HIGH",
      createdAt: new Date().toISOString(),
      viewUrl: "https://tickets.esdrasrenan.com.br/tickets/12345",
    })

    await sendSmtpMail(smtpConfig, DESTINATARIO, "Chamado #12345 Aberto - Problema no sistema de vendas", html)
    console.log("   SUCESSO!")
  } catch (error) {
    console.error("   ERRO:", (error as Error).message)
  }

  // 3. Teste de resolucao de chamado
  console.log("\n[3/10] Enviando notificacao de resolucao...")
  try {
    const html = renderTemplate("ticket_resolved", {
      reference: 12345,
      subject: "Problema no sistema de vendas",
      assigneeName: "Joao Silva",
      resolutionSummary: "O problema foi identificado como uma configuracao incorreta no modulo de pagamentos. A configuracao foi corrigida e o sistema esta funcionando normalmente.",
      viewUrl: "https://tickets.esdrasrenan.com.br/tickets/12345",
      rateUrl: "https://tickets.esdrasrenan.com.br/rate/12345",
    })

    await sendSmtpMail(smtpConfig, DESTINATARIO, "Chamado #12345 Resolvido - Problema no sistema de vendas", html)
    console.log("   SUCESSO!")
  } catch (error) {
    console.error("   ERRO:", (error as Error).message)
  }

  // 4. Teste de comentario
  console.log("\n[4/10] Enviando notificacao de comentario...")
  try {
    const html = renderTemplate("ticket_comment", {
      reference: 12345,
      subject: "Problema no sistema de vendas",
      authorName: "Joao Silva",
      commentBody: "Estou analisando o problema e em breve envio uma atualizacao. Por favor, verifique se o erro persiste apos limpar o cache do navegador.",
      commentedAt: new Date().toISOString(),
      viewUrl: "https://tickets.esdrasrenan.com.br/tickets/12345",
    })

    await sendSmtpMail(smtpConfig, DESTINATARIO, "Nova atualizacao no Chamado #12345", html)
    console.log("   SUCESSO!")
  } catch (error) {
    console.error("   ERRO:", (error as Error).message)
  }

  // 5. Teste de atribuicao de chamado
  console.log("\n[5/10] Enviando notificacao de atribuicao...")
  try {
    const html = renderTemplate("ticket_assigned", {
      reference: 12345,
      subject: "Problema no sistema de vendas",
      status: "AWAITING_ATTENDANCE",
      priority: "HIGH",
      requesterName: "Maria Santos",
      assigneeName: "Joao Silva",
      isForRequester: false,
      viewUrl: "https://tickets.esdrasrenan.com.br/tickets/12345",
    })

    await sendSmtpMail(smtpConfig, DESTINATARIO, "Chamado #12345 Atribuido", html)
    console.log("   SUCESSO!")
  } catch (error) {
    console.error("   ERRO:", (error as Error).message)
  }

  // 6. Teste de mudanca de status
  console.log("\n[6/10] Enviando notificacao de mudanca de status...")
  try {
    const html = renderTemplate("ticket_status", {
      reference: 12345,
      subject: "Problema no sistema de vendas",
      oldStatus: "PENDING",
      newStatus: "AWAITING_ATTENDANCE",
      viewUrl: "https://tickets.esdrasrenan.com.br/tickets/12345",
    })

    await sendSmtpMail(smtpConfig, DESTINATARIO, "Status do Chamado #12345 Alterado", html)
    console.log("   SUCESSO!")
  } catch (error) {
    console.error("   ERRO:", (error as Error).message)
  }

  // 7. Teste de reset de senha
  console.log("\n[7/10] Enviando notificacao de reset de senha...")
  try {
    const html = renderTemplate("password_reset", {
      resetUrl: "https://tickets.esdrasrenan.com.br/reset-password?token=abc123",
    })

    await sendSmtpMail(smtpConfig, DESTINATARIO, "Redefinicao de Senha - Raven", html)
    console.log("   SUCESSO!")
  } catch (error) {
    console.error("   ERRO:", (error as Error).message)
  }

  // 8. Teste de convite
  console.log("\n[8/10] Enviando notificacao de convite...")
  try {
    const html = renderTemplate("invite", {
      inviterName: "Admin Sistema",
      roleName: "Agente",
      companyName: "Empresa Teste",
      inviteUrl: "https://tickets.esdrasrenan.com.br/invite?token=xyz789",
    })

    await sendSmtpMail(smtpConfig, DESTINATARIO, "Voce foi convidado - Raven", html)
    console.log("   SUCESSO!")
  } catch (error) {
    console.error("   ERRO:", (error as Error).message)
  }

  // 9. Teste de novo login
  console.log("\n[9/10] Enviando notificacao de novo login...")
  try {
    const html = renderTemplate("new_login", {
      loginAt: new Date().toISOString(),
      userAgent: "Chrome 120 no Windows 11",
      ipAddress: "189.45.123.78",
    })

    await sendSmtpMail(smtpConfig, DESTINATARIO, "Novo Acesso Detectado - Raven", html)
    console.log("   SUCESSO!")
  } catch (error) {
    console.error("   ERRO:", (error as Error).message)
  }

  // 10. Teste de SLA em risco
  console.log("\n[10/10] Enviando notificacao de SLA em risco...")
  try {
    const html = renderTemplate("sla_warning", {
      reference: 12345,
      subject: "Problema no sistema de vendas",
      status: "AWAITING_ATTENDANCE",
      priority: "HIGH",
      requesterName: "Maria Santos",
      assigneeName: "Joao Silva",
      timeRemaining: "2 horas",
      dueAt: new Date(Date.now() + 2 * 60 * 60 * 1000).toISOString(),
      viewUrl: "https://tickets.esdrasrenan.com.br/tickets/12345",
    })

    await sendSmtpMail(smtpConfig, DESTINATARIO, "ALERTA: SLA em Risco - Chamado #12345", html)
    console.log("   SUCESSO!")
  } catch (error) {
    console.error("   ERRO:", (error as Error).message)
  }

  console.log("\n" + "=".repeat(50))
  console.log("TESTE CONCLUIDO - 10 TIPOS DE NOTIFICACAO")
  console.log("=".repeat(50))
  console.log(`Verifique a caixa de entrada de: ${DESTINATARIO}`)
}

testEmail().catch(console.error)
