from django.contrib.auth.models import Group
from django.core.management.base import BaseCommand

from apps.accounts.models import User
from apps.accounts.signals import create_default_groups


class Command(BaseCommand):
    help = "Set up default groups and permissions for user roles"

    def handle(self, *args, **options):
        self.stdout.write("Creating default groups and permissions...")

        try:
            # Create default groups with permissions
            create_default_groups()

            # Sync existing users with groups based on their roles
            users = User.objects.exclude(role=User.Roles.USER)
            for user in users:
                group = Group.objects.filter(name=user.role).first()
                if group:
                    user.groups.add(group)

                    # Update staff/superuser status based on role
                    if user.role == User.Roles.SUPERUSER:
                        user.is_superuser = True
                        user.is_staff = True
                    elif user.role in [User.Roles.ADMIN, User.Roles.MODERATOR]:
                        user.is_staff = True
                    user.save()

            self.stdout.write(self.style.SUCCESS("Successfully set up groups and permissions"))

            # Print summary
            for group in Group.objects.all():
                self.stdout.write(f"\nGroup: {group.name}")
                self.stdout.write("Permissions:")
                for perm in group.permissions.all():
                    self.stdout.write(f"  - {perm.codename}")

        except Exception as e:
            self.stdout.write(self.style.ERROR(f"Error setting up groups: {str(e)}"))
