import { BaseCommand, args, flags } from '@adonisjs/core/ace'
import type { CommandOptions } from '@adonisjs/core/types/ace'
import mail from '@adonisjs/mail/services/main'
import env from '#start/env'

/**
 * Envoie un email de test via le mailer courant (typiquement Resend)
 * pour valider la conf SPF/DKIM/clé API sans passer par toute la chaîne
 * facture → job BullMQ.
 *
 *   node ace send:test-email arthur@example.com
 *   node ace send:test-email arthur@example.com --reply-to=patron@tpe.fr
 */
export default class SendTestEmail extends BaseCommand {
  static commandName = 'send:test-email'
  static description = 'Envoie un email de test via le mailer configuré (Resend en prod)'

  static options: CommandOptions = {
    startApp: true,
  }

  @args.string({ description: 'Adresse destinataire' })
  declare to: string

  @flags.string({ description: 'Adresse de reply-to (optionnelle)' })
  declare replyTo?: string

  async run() {
    const driver = env.get('MAIL_DRIVER', 'smtp')
    const fromAddress = env.get('MAIL_FROM_ADDRESS', 'relances@rubis-sur-l-ongle.fr')
    const fromName = env.get('MAIL_FROM_NAME', "Rubis Sur l'Ongle")

    this.logger.info(`Driver: ${driver}`)
    this.logger.info(`From:   ${fromName} <${fromAddress}>`)
    this.logger.info(`To:     ${this.to}`)
    if (this.replyTo) this.logger.info(`ReplyTo: ${this.replyTo}`)

    const mailer = mail.use(driver)
    const response = await mailer.send((m) => {
      m.from(fromAddress, fromName)
        .to(this.to)
        .subject('[Rubis] Test d\'envoi via Resend')
        .text(
          `Bonjour,\n\n` +
            `Ceci est un email de test envoyé depuis Rubis Sur l'Ongle.\n` +
            `Si vous recevez ce message, la conf Resend (SPF/DKIM/API key) est OK.\n\n` +
            `Driver utilisé : ${driver}\n` +
            `Date : ${new Date().toISOString()}\n\n` +
            `— L'équipe Rubis`
        )
      if (this.replyTo) m.replyTo(this.replyTo)
    })

    this.logger.success('Email envoyé')
    // Resend renvoie un messageId dans la réponse — utile pour retrouver
    // le log dans le dashboard.
    if (response?.messageId) {
      this.logger.info(`messageId: ${response.messageId}`)
    }
  }
}
