from django.core.management.base import BaseCommand
from django.db import connection, transaction

from accounts.models import Role, User


class Command(BaseCommand):
    help = "Normalize legacy auth records for Django auth layer."

    def handle(self, *args, **options):
        with transaction.atomic():
            self._ensure_system_roles()
            self._backfill_user_role_links()
        self.stdout.write(self.style.SUCCESS("Legacy auth migration checks complete."))

    def _ensure_system_roles(self):
        defaults = [("user", "User"), ("admin", "Admin"), ("director", "Director")]
        for slug, name in defaults:
            Role.objects.get_or_create(
                slug=slug,
                defaults={
                    "name": name,
                    "is_system": True,
                },
            )

    def _backfill_user_role_links(self):
        slug_to_id = {r.slug: r.id for r in Role.objects.all()}
        for user in User.objects.filter(role_obj__isnull=True):
            target = slug_to_id.get((user.role or "user").lower())
            if target:
                User.objects.filter(id=user.id).update(role_obj_id=target)

