import nodemailer from 'nodemailer';

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

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

/**
 * Serviço de envio de emails usando SMTP
 * Configurado para usar as credenciais do SaveInMed
 */
export class EmailService {
  private transporter: nodemailer.Transporter;

  constructor() {
    // Configuração SMTP baseada nas credenciais fornecidas
    const emailConfig: EmailConfig = {
      host: 'mail.saveinmed.com.br',
      port: 465, // Porta SMTP com SSL/TLS implícito
      secure: true, // TLS implícito na porta 465
      auth: {
        user: process.env.EMAIL_USER || 'nao-responda@saveinmed.com.br',
        pass: process.env.EMAIL_PASSWORD || 'f0TA2mFdZIVT7bUD'
      }
    };

    this.transporter = nodemailer.createTransport(emailConfig);
  }

  /**
   * Envia notificação por email para administrador sobre novo cadastro
   */
  async sendAdminNotification(userData: EmailData): Promise<void> {
    const frontendUrl = process.env.NEXT_PUBLIC_FRONTEND_URL || 'http://localhost:3000';
    const adminEmail = process.env.ADMIN_EMAIL || 'admin@saveinmed.com.br';

    const mailOptions = {
      from: `"SaveInMed - Notificações" <${process.env.EMAIL_USER || 'nao-responda@saveinmed.com.br'}>`,
      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>

            <!-- Nota Importante -->
            <div style="background-color: #fef3c7; padding: 15px; border-radius: 6px; border-left: 4px solid #f59e0b; margin-bottom: 20px;">
              <p style="margin: 0; color: #92400e; font-size: 14px;">
                <strong>💡 Importante:</strong> O usuário foi cadastrado com registro incompleto. 
                É necessário aprovar o acesso e solicitar que complete os dados no sistema.
              </p>
            </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>
      `,
      text: `
🎉 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

💡 Importante: O usuário foi cadastrado com registro incompleto. 
É necessário aprovar o acesso e solicitar que complete os dados no sistema.

Notificação automática do sistema SaveInMed
      `
    };

    try {
      await this.transporter.sendMail(mailOptions);
      console.log('✅ Email de notificação enviado com sucesso para:', adminEmail);
    } catch (error) {
      console.error('❌ Erro ao enviar email de notificação:', error);
      throw new Error(`Falha no envio de email: ${error instanceof Error ? error.message : 'Erro desconhecido'}`);
    }
  }

  /**
   * Envia email de boas-vindas para o usuário
   */
  async sendWelcomeEmail(userData: EmailData): Promise<void> {
    const frontendUrl = process.env.NEXT_PUBLIC_FRONTEND_URL || 'http://localhost:3000';

    const mailOptions = {
      from: `"SaveInMed - Boas Vindas" <${process.env.EMAIL_USER || 'nao-responda@saveinmed.com.br'}>`,
      to: userData.email,
      subject: '🎉 Bem-vindo ao 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;">🎉 Bem-vindo, ${userData.nome}!</h2>
            </div>

            <!-- Mensagem Principal -->
            <div style="margin-bottom: 25px;">
              <p style="color: #374151; font-size: 16px; line-height: 1.6; margin: 0 0 15px 0;">
                Obrigado por se cadastrar no <strong>SaveInMed</strong>! Sua conta foi criada com sucesso.
              </p>
              <p style="color: #374151; font-size: 16px; line-height: 1.6; margin: 0 0 15px 0;">
                Nosso sistema foi desenvolvido para conectar farmácias e otimizar a gestão de medicamentos, 
                especialmente aqueles próximos ao vencimento.
              </p>
            </div>

            <!-- Status da Conta -->
            <div style="background-color: #fef3c7; padding: 20px; border-radius: 8px; margin-bottom: 25px; border-left: 4px solid #f59e0b;">
              <h3 style="color: #92400e; font-size: 18px; margin: 0 0 10px 0;">📋 Status da sua conta:</h3>
              <p style="color: #92400e; margin: 0; font-size: 14px; line-height: 1.5;">
                <strong>Aguardando aprovação:</strong> Sua conta está sendo revisada por nosso time. 
                Você receberá uma notificação quando ela for aprovada e estiver pronta para uso.
              </p>
            </div>

            <!-- Próximos Passos -->
            <div style="margin-bottom: 25px;">
              <h3 style="color: #374151; font-size: 18px; margin: 0 0 15px 0;">📝 Próximos passos:</h3>
              <ol style="color: #374151; padding-left: 20px; line-height: 1.6;">
                <li>Aguarde a aprovação da sua conta por nossa equipe</li>
                <li>Você receberá um email de confirmação quando aprovado</li>
                <li>Complete seu perfil e dados da empresa</li>
                <li>Comece a usar o sistema para gerenciar seus medicamentos</li>
              </ol>
            </div>

            <!-- Botão de Acesso -->
            <div style="text-align: center; margin-bottom: 25px;">
              <a href="${frontendUrl}/login" 
                 style="display: inline-block; background-color: #2563eb; color: white; padding: 15px 30px; text-decoration: none; border-radius: 8px; font-weight: bold; font-size: 16px;">
                🔑 Acessar Sistema
              </a>
            </div>

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

          </div>
        </div>
      `,
      text: `
🎉 Bem-vindo ao SaveInMed, ${userData.nome}!

Obrigado por se cadastrar! Sua conta foi criada com sucesso.

📋 Status da sua conta:
Aguardando aprovação - Sua conta está sendo revisada por nosso time.

📝 Próximos passos:
1. Aguarde a aprovação da sua conta
2. Você receberá um email de confirmação
3. Complete seu perfil e dados da empresa
4. Comece a usar o sistema

Acesse: ${frontendUrl}/login

SaveInMed - Conectando farmácias, otimizando resultados
      `
    };

    try {
      await this.transporter.sendMail(mailOptions);
      console.log('✅ Email de boas-vindas enviado com sucesso para:', userData.email);
    } catch (error) {
      console.error('❌ Erro ao enviar email de boas-vindas:', error);
      throw new Error(`Falha no envio de email: ${error instanceof Error ? error.message : 'Erro desconhecido'}`);
    }
  }

  /**
   * Testa a conexão SMTP
   */
  async testConnection(): Promise<boolean> {
    try {
      await this.transporter.verify();
      console.log('✅ Conexão SMTP verificada com sucesso');
      return true;
    } catch (error) {
      console.error('❌ Erro na conexão SMTP:', error);
      return false;
    }
  }
}

export default EmailService;