from django.core.management.base import BaseCommand
from django.contrib.auth.models import User
from accounts.models import Employee
from decimal import Decimal

class Command(BaseCommand):
    help = 'Create test users for different roles'

    def handle(self, *args, **kwargs):
        # Clean up existing test users
        self.stdout.write('Cleaning up existing test users...')
        User.objects.filter(username__in=['john.emp', 'sarah.hr', 'mike.reg', 'lisa.fin']).delete()
        
        # Create test users for each role
        users = [
            {
                'username': 'john.emp',
                'email': 'john@ictaz.org',
                'password': 'testpass123',
                'first_name': 'John',
                'last_name': 'Employee',
                'role': 'EMP',
                'basic_pay': Decimal('5000.00')
            },
            {
                'username': 'sarah.hr',
                'email': 'sarah@ictaz.org',
                'password': 'testpass123',
                'first_name': 'Sarah',
                'last_name': 'HR',
                'role': 'HR',
                'basic_pay': Decimal('7000.00')
            },
            {
                'username': 'mike.reg',
                'email': 'mike@ictaz.org',
                'password': 'testpass123',
                'first_name': 'Mike',
                'last_name': 'Registrar',
                'role': 'REG',
                'basic_pay': Decimal('8000.00')
            },
            {
                'username': 'lisa.fin',
                'email': 'lisa@ictaz.org',
                'password': 'testpass123',
                'first_name': 'Lisa',
                'last_name': 'Finance',
                'role': 'FIN',
                'basic_pay': Decimal('6000.00')
            }
        ]

        for user_data in users:
            username = user_data.pop('username')
            password = user_data.pop('password')
            role = user_data.pop('role')
            basic_pay = user_data.pop('basic_pay')

            try:
                # Create new user
                user = User.objects.create_user(
                    username=username,
                    password=password,
                    **user_data
                )

                # Create employee
                employee = Employee.objects.create(
                    user=user,
                    role=role,
                    basic_pay=basic_pay
                )

                self.stdout.write(
                    self.style.SUCCESS(f'Created {user.get_full_name()} ({user.username}) as {role}')
                )
            except Exception as e:
                self.stdout.write(
                    self.style.ERROR(f'Error creating {username}: {str(e)}')
                )
