
from django.core.management.base import BaseCommand
from django.contrib.auth.models import Group
from hr.models import Department
from django.db import transaction

class Command(BaseCommand):
    help = 'Set up department structure with proper permission groups'

    def handle(self, *args, **options):
        self.stdout.write('Setting up departments...')
        
        with transaction.atomic():
            # Get or create permission groups
            management_group, _ = Group.objects.get_or_create(name='Management')
            technician_group, _ = Group.objects.get_or_create(name='Technician')
            marketing_group, _ = Group.objects.get_or_create(name='Marketing')
            hr_group, _ = Group.objects.get_or_create(name='HR Staff')
            billing_group, _ = Group.objects.get_or_create(name='Billing Staff')
            
            # Create departments
            departments_data = [
                {
                    'name': 'Management',
                    'description': 'Senior management with full system access and decision-making authority',
                    'user_group': management_group,
                },
                {
                    'name': 'Technician',
                    'description': 'Technical support staff responsible for tickets, scheduling, and network management',
                    'user_group': technician_group,
                },
                {
                    'name': 'Marketing',
                    'description': 'Marketing team with customer management and ticket creation capabilities',
                    'user_group': marketing_group,
                },
                {
                    'name': 'HR',
                    'description': 'Human Resources department managing employee affairs',
                    'user_group': hr_group,
                },
                {
                    'name': 'Billing',
                    'description': 'Billing and finance department managing invoices and payments',
                    'user_group': billing_group,
                },
            ]
            
            for dept_data in departments_data:
                department, created = Department.objects.get_or_create(
                    name=dept_data['name'],
                    defaults={
                        'description': dept_data['description'],
                        'user_group': dept_data['user_group'],
                        'is_active': True,
                    }
                )
                
                if created:
                    self.stdout.write(
                        self.style.SUCCESS(f'Created department: {department.name}')
                    )
                else:
                    # Update existing department
                    department.description = dept_data['description']
                    department.user_group = dept_data['user_group']
                    department.is_active = True
                    department.save()
                    self.stdout.write(
                        self.style.WARNING(f'Updated department: {department.name}')
                    )
        
        self.stdout.write(
            self.style.SUCCESS('Successfully set up departments!')
        )
