"""Emite una clave de API para una cuenta y la muestra una única vez."""

from django.contrib.auth import get_user_model
from django.core.management.base import BaseCommand, CommandError

from apps.accounts.models import ApiKey


class Command(BaseCommand):
    help = 'Emite una clave de API para una cuenta. El valor se muestra una sola vez.'

    def add_arguments(self, parser):
        parser.add_argument('email', help='Correo de la cuenta a la que pertenece la clave')
        parser.add_argument(
            '--name',
            default='Clave de despliegue',
            help='Nombre con el que se reconoce la clave en la pantalla de claves',
        )

    def handle(self, *args, **options):
        account_model = get_user_model()
        try:
            account = account_model.objects.get(email=options['email'])
        except account_model.DoesNotExist as exc:
            raise CommandError(f'No existe una cuenta con el correo {options["email"]}.') from exc

        key, plaintext = ApiKey.issue(account=account, name=options['name'])

        self.stdout.write(self.style.SUCCESS(f'Clave emitida para {account.email}.'))
        self.stdout.write(f'Nombre:  {key.name}')
        self.stdout.write(f'Prefijo: {key.prefix}')
        self.stdout.write('')
        self.stdout.write(self.style.WARNING('Guardala ahora: no se puede volver a mostrar.'))
        self.stdout.write(plaintext)
