"""Generate a JWT token for testing without Firebase."""

from django.core.management.base import BaseCommand
from rest_framework_simplejwt.tokens import RefreshToken

from apps.users.models import User


class Command(BaseCommand):
    help = "Generate JWT tokens for a test user (dev only)"

    def add_arguments(self, parser):
        parser.add_argument(
            "--phone",
            default="+971509999999",
            help="Phone number for the test user (default: +971509999999)",
        )
        parser.add_argument(
            "--uid",
            default="test_firebase_uid",
            help="Fake firebase UID (default: test_firebase_uid)",
        )
        parser.add_argument(
            "--admin",
            action="store_true",
            help="Make the user a superuser/admin",
        )

    def handle(self, *args, **options):
        phone = options["phone"]
        uid = options["uid"]
        is_admin = options["admin"]

        # Try to get existing user by firebase_uid first
        try:
            user = User.objects.get(firebase_uid=uid)
            created = False
        except User.DoesNotExist:
            # Try to find by phone number and reuse that user
            try:
                user = User.objects.get(phone_number=phone)
                user.firebase_uid = uid
                user.save(update_fields=["firebase_uid"])
                created = False
            except User.DoesNotExist:
                user = User.objects.create(
                    firebase_uid=uid,
                    username=uid,
                    phone_number=phone,
                )
                created = True

        if is_admin:
            user.is_staff = True
            user.is_superuser = True
            user.save(update_fields=["is_staff", "is_superuser"])

        if created:
            self.stdout.write(self.style.SUCCESS(f"Created test user: {uid}"))
        else:
            self.stdout.write(f"Using existing user: {uid}")

        refresh = RefreshToken.for_user(user)

        self.stdout.write("\n" + "=" * 60)
        self.stdout.write(self.style.SUCCESS("ACCESS TOKEN:"))
        self.stdout.write(str(refresh.access_token))
        self.stdout.write("\n" + "=" * 60)
        self.stdout.write(self.style.SUCCESS("REFRESH TOKEN:"))
        self.stdout.write(str(refresh))
        self.stdout.write("=" * 60)
        self.stdout.write(f"\nUser ID: {user.id}")
        self.stdout.write(f"Phone: {user.phone_number}")
        self.stdout.write(f"Admin: {user.is_superuser}")
