from django.core.management.base import BaseCommand
from accounts.models import GroupPermissionManager

class Command(BaseCommand):
    help = 'Populate default system permissions'

    def handle(self, *args, **options):
        permissions = [
            # Customer Management
            ('view_customers', 'View Customers', 'Can view customer list and details', 'customer'),
            ('add_customers', 'Add Customers', 'Can create new customers', 'customer'),
            ('change_customers', 'Edit Customers', 'Can modify customer information', 'customer'),
            ('delete_customers', 'Delete Customers', 'Can delete customers', 'customer'),
            ('view_customer', 'View Customer', 'Can view individual customer', 'customer'),
            ('add_customer', 'Add Customer', 'Can add new customer', 'customer'),
            ('change_customer', 'Change Customer', 'Can modify customer', 'customer'),
            ('delete_customer', 'Delete Customer', 'Can delete customer', 'customer'),

            # Billing & Invoicing
            ('view_billing', 'View Billing', 'Can access billing information', 'billing'),
            ('create_invoice', 'Create Invoice', 'Can create invoices', 'billing'),
            ('view_invoice', 'View Invoice', 'Can view invoices', 'billing'),
            ('change_invoice', 'Change Invoice', 'Can modify invoices', 'billing'),
            ('delete_invoice', 'Delete Invoice', 'Can delete invoices', 'billing'),

            # Ticket Management
            ('view_tickets', 'View Tickets', 'Can view support tickets', 'ticket'),
            ('view_ticket', 'View Ticket', 'Can view individual ticket', 'ticket'),
            ('add_ticket', 'Add Ticket', 'Can create support tickets', 'ticket'),
            ('change_ticket', 'Change Ticket', 'Can modify tickets', 'ticket'),
            ('delete_ticket', 'Delete Ticket', 'Can delete tickets', 'ticket'),
            ('assign_tickets', 'Assign Tickets', 'Can assign tickets to technicians', 'ticket'),

            # Employee Management
            ('view_employees', 'View Employees', 'Can view employee information', 'employee'),
            ('add_employee', 'Add Employee', 'Can create employee profiles', 'employee'),
            ('change_employee', 'Change Employee', 'Can modify employee information', 'employee'),
            ('delete_employee', 'Delete Employee', 'Can delete employees', 'employee'),

            # HR Management
            ('view_hr', 'View HR', 'Can access HR features', 'hr'),
            ('manage_payroll', 'Manage Payroll', 'Can manage payroll and salaries', 'hr'),
            ('view_payslip', 'View Payslip', 'Can view payslips', 'hr'),
            ('add_payslip', 'Add Payslip', 'Can create payslips', 'hr'),
            ('change_payslip', 'Change Payslip', 'Can modify payslips', 'hr'),

            # Financial Access
            ('view_financial', 'View Financial', 'Can access financial reports', 'financial'),
            ('manage_financial', 'Manage Financial', 'Can manage financial data', 'financial'),

            # Payment Management
            ('view_payments', 'View Payments', 'Can view payment records', 'billing'),
            ('view_payment', 'View Payment', 'Can view individual payment', 'billing'),
            ('add_payment', 'Add Payment', 'Can record payments', 'billing'),
            ('change_payment', 'Change Payment', 'Can modify payments', 'billing'),

            # Expenditure Management
            ('view_expenses', 'View Expenses', 'Can view expense records', 'expenditure'),
            ('create_expenses', 'Create Expenses', 'Can create expense records', 'expenditure'),
            ('manage_expenses', 'Manage Expenses', 'Can approve/reject expenses', 'expenditure'),
            ('approve_expenses', 'Approve Expenses', 'Can approve expense requests', 'expenditure'),
            ('view_expense', 'View Expense', 'Can view individual expense', 'expenditure'),
            ('add_expense', 'Add Expense', 'Can add new expenses', 'expenditure'),
            ('change_expense', 'Change Expense', 'Can modify expenses', 'expenditure'),
            ('delete_expense', 'Delete Expense', 'Can delete expenses', 'expenditure'),

            # Marketing
            ('view_marketing', 'View Marketing', 'Can access marketing features', 'marketing'),
            ('manage_marketing', 'Manage Marketing', 'Can manage marketing activities', 'marketing'),
            ('view_analytics', 'View Analytics', 'Can view analytics', 'marketing'),
            ('create_reports', 'Create Reports', 'Can create reports', 'marketing'),
            ('view_reports', 'View Reports', 'Can view reports', 'marketing'),
            ('add_marketingleadinteraction', 'Add Marketing Lead Interaction', 'Can add marketing lead interactions', 'marketing'),
            ('change_marketingleadinteraction', 'Change Marketing Lead Interaction', 'Can change marketing lead interactions', 'marketing'),
            ('view_marketingleadinteraction', 'View Marketing Lead Interaction', 'Can view marketing lead interactions', 'marketing'),
            ('delete_marketingleadinteraction', 'Delete Marketing Lead Interaction', 'Can delete marketing lead interactions', 'marketing'),
            ('add_marketingreporttemplate', 'Add Marketing Report Template', 'Can add marketing report templates', 'marketing'),
            ('change_marketingreporttemplate', 'Change Marketing Report Template', 'Can change marketing report templates', 'marketing'),
            ('view_marketingreporttemplate', 'View Marketing Report Template', 'Can view marketing report templates', 'marketing'),
            ('delete_marketingreporttemplate', 'Delete Marketing Report Template', 'Can delete marketing report templates', 'marketing'),

            # System Settings
            ('view_settings', 'View Settings', 'Can view system settings', 'system'),
            ('manage_settings', 'Manage Settings', 'Can modify system settings', 'system'),
            ('manage_system', 'Manage System', 'Full system management access', 'system'),

            # Network Management
            ('view_network', 'View Network', 'Can view network information', 'network'),
            ('manage_network', 'Manage Network', 'Can manage network settings', 'network'),

            # Reports & Analytics
            ('view_reports', 'View Reports', 'Can access reports and analytics', 'reports'),
            ('generate_reports', 'Generate Reports', 'Can generate custom reports', 'reports'),
        ]

        created_count = 0
        updated_count = 0

        for name, display_name, description, category in permissions:
            permission, created = GroupPermissionManager.objects.get_or_create(
                name=name,
                defaults={
                    'display_name': display_name,
                    'description': description,
                    'category': category,
                    'is_active': True
                }
            )

            if created:
                created_count += 1
                self.stdout.write(f'Created permission: {name}')
            else:
                # Update existing permission
                permission.display_name = display_name
                permission.description = description
                permission.category = category
                permission.save()
                updated_count += 1
                self.stdout.write(f'Updated permission: {name}')

        self.stdout.write(
            self.style.SUCCESS(
                f'Successfully processed {len(permissions)} permissions. '
                f'Created: {created_count}, Updated: {updated_count}'
            )
        )