import { BaseMail } from '@adonisjs/mail'
import type User from '#models/user'
import i18nManager from '@adonisjs/i18n/services/main'
import { verifyEmailHtml } from './templates/verify_email.js'

export default class VerifyEmailNotification extends BaseMail {
  readonly #verifyUrl: string
  readonly #locale: string

  constructor(user: User, verifyUrl: string, locale: string = 'en') {
    super()
    this.user = user
    this.#verifyUrl = verifyUrl
    this.#locale = locale
  }

  private user: User

  prepare() {
    const i18n = i18nManager.locale(this.#locale)
    const t = (key: string, data?: Record<string, unknown>) => i18n.t(`mails.${key}`, data)

    this.message
      .to(this.user.email)
      .subject(t('verify_email.subject') as string)
      .html(verifyEmailHtml(t, this.user.username ?? '', this.user.email, this.#verifyUrl))
  }
}
