
from django.core.management.base import BaseCommand
from django.contrib.auth.models import Group, Permission
from django.contrib.contenttypes.models import ContentType

class Command(BaseCommand):
    help = 'Set up permission groups for the application'

    def handle(self, *args, **options):
        # Create groups
        administrator_group, created = Group.objects.get_or_create(name='Administrator')
        sales_group, created = Group.objects.get_or_create(name='Sales')
        supervisor_group, created = Group.objects.get_or_create(name='Supervisor')
        manager_group, created = Group.objects.get_or_create(name='Manager')

        # Clear existing permissions
        administrator_group.permissions.clear()
        sales_group.permissions.clear()
        supervisor_group.permissions.clear()
        manager_group.permissions.clear()

        # Get all permissions
        all_permissions = Permission.objects.all()
        
        # Administrator gets all permissions
        administrator_group.permissions.set(all_permissions)

        # Sales permissions - only sales, customers
        sales_permissions = Permission.objects.filter(
            content_type__app_label__in=['sales', 'customers', 'dashboard']
        )
        sales_group.permissions.set(sales_permissions)

        # Supervisor permissions - suppliers, orders, inventory, sales, customers
        supervisor_permissions = Permission.objects.filter(
            content_type__app_label__in=['suppliers', 'orders', 'inventory', 'sales', 'customers', 'dashboard']
        )
        supervisor_group.permissions.set(supervisor_permissions)

        # Manager permissions - all except user management
        manager_permissions = all_permissions.exclude(
            content_type__app_label='auth',
            codename__in=['add_user', 'change_user', 'delete_user', 'view_user']
        ).exclude(
            content_type__app_label='authapp'
        )
        manager_group.permissions.set(manager_permissions)

        self.stdout.write(
            self.style.SUCCESS('Successfully set up permission groups')
        )
