from django.core.management.base import BaseCommand

from accounts.models import User


class Command(BaseCommand):
    help = "Cria ou atualiza um superusuário (e-mail + senha)."

    def add_arguments(self, parser):
        parser.add_argument("--email", required=True)
        parser.add_argument("--password", required=True)
        parser.add_argument("--name", default="Administrador")
        parser.add_argument("--username", default="")

    def handle(self, *args, **options):
        email = options["email"].strip().lower()
        username = (options["username"] or email.split("@")[0]).strip().lower()

        user, created = User.objects.get_or_create(
            email=email,
            defaults={
                "name": options["name"],
                "username": username,
                "is_superuser": True,
                "is_staff": True,
                "is_active": True,
            },
        )
        if not created:
            user.is_superuser = True
            user.is_staff = True
            user.is_active = True
            if options["name"]:
                user.name = options["name"]

        user.set_password(options["password"])
        user.save()

        verb = "Criado" if created else "Atualizado"
        self.stdout.write(self.style.SUCCESS(f"{verb} superusuário: {email} ({user.username})"))
