from django.core.management.base import BaseCommand
from django.contrib.auth import get_user_model
from role.models import Profil, Role, RoleAssignment

User = get_user_model()

class Command(BaseCommand):
    help = 'Create initial role data for testing'

    def handle(self, *args, **options):
        # Create default roles
        roles_data = [
            {
                'name': 'Administrator',
                'role_type': 'admin',
                'description': 'Full access to all system features',
                'is_active': True
            },
            {
                'name': 'Supervisor',
                'role_type': 'supervisor', 
                'description': 'Limited access for operational oversight',
                'is_active': True
            },
            {
                'name': 'Operator',
                'role_type': 'operator',
                'description': 'Access for daily operations',
                'is_active': True
            },
            {
                'name': 'Viewer',
                'role_type': 'viewer',
                'description': 'Read-only access',
                'is_active': True
            },
            {
                'name': 'Inventaris Admin',
                'role_type': 'inventaris_admin',
                'description': 'Inventory management administrator',
                'is_active': True
            },
            {
                'name': 'Inventaris Staff',
                'role_type': 'inventaris_staff',
                'description': 'Inventory management staff',
                'is_active': True
            }
        ]

        for role_data in roles_data:
            role, created = Role.objects.get_or_create(
                name=role_data['name'],
                defaults=role_data
            )
            if created:
                self.stdout.write(
                    self.style.SUCCESS(f'Created role: {role.name}')
                )
            else:
                self.stdout.write(
                    self.style.WARNING(f'Role already exists: {role.name}')
                )

        # Create profiles for existing users who don't have one
        # Skip this for now due to foreign key issues
        # users_without_profiles = User.objects.filter(profil__isnull=True)
        
        # for user in users_without_profiles:
        #     profil = Profil.objects.create(
        #         user=user,
        #         nama_lengkap=user.get_full_name() or user.username,
        #         email=user.email,
        #         level_akses='operator',
        #         created_by=user,
        #         updated_by=user
        #     )
        #     self.stdout.write(
        #         self.style.SUCCESS(f'Created profile for user: {user.username}')
        #     )

        self.stdout.write(
            self.style.SUCCESS('Successfully created initial role data!')
        )
