import { BaseCommand, flags } from '@adonisjs/core/ace'
import type { CommandOptions } from '@adonisjs/core/types/ace'

import User from '#models/user'

/**
 * Bascule un user en admin (accès à /admin/blog + endpoints /api/v1/admin/*).
 *
 *   node ace promote:admin --email=arthurbarre.js@gmail.com
 *   node ace promote:admin --email=... --revoke    # retire le rôle
 */
export default class PromoteAdmin extends BaseCommand {
  static commandName = 'promote:admin'
  static description = 'Promeut (ou révoque) le rôle admin pour un user existant'

  static options: CommandOptions = {
    startApp: true,
  }

  @flags.string({
    description: "Email du user à promouvoir",
    required: true,
  })
  declare email: string

  @flags.boolean({
    description: 'Retire le rôle admin au lieu de l\'octroyer',
    default: false,
  })
  declare revoke: boolean

  async run() {
    const user = await User.findBy('email', String(this.email).toLowerCase())
    if (!user) {
      this.logger.error(`User introuvable : ${this.email}`)
      this.exitCode = 1
      return
    }

    user.isAdmin = !this.revoke
    await user.save()

    this.logger.success(
      `${user.email} → is_admin = ${user.isAdmin}`,
    )
  }
}
