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 = 'Set up test data including users and employees'

    def handle(self, *args, **kwargs):
        # First clean up existing data
        self.stdout.write('Cleaning up existing data...')
        User.objects.all().delete()
        Employee.objects.all().delete()

        # Test user data
        users_data = [
            {
                'username': 'john.emp',
                'password': 'testpass123',
                'email': 'john@ictaz.org',
                'first_name': 'John',
                'last_name': 'Employee',
                'role': 'EMP',
                'basic_pay': 5000.00
            },
            {
                'username': 'sarah.hr',
                'password': 'testpass123',
                'email': 'sarah@ictaz.org',
                'first_name': 'Sarah',
                'last_name': 'HR',
                'role': 'HR',
                'basic_pay': 7000.00
            },
            {
                'username': 'mike.reg',
                'password': 'testpass123',
                'email': 'mike@ictaz.org',
                'first_name': 'Mike',
                'last_name': 'Registrar',
                'role': 'REG',
                'basic_pay': 8000.00
            },
            {
                'username': 'lisa.fin',
                'password': 'testpass123',
                'email': 'lisa@ictaz.org',
                'first_name': 'Lisa',
                'last_name': 'Finance',
                'role': 'FIN',
                'basic_pay': 6000.00
            }
        ]

        for data in users_data:
            try:
                # Extract employee specific data
                role = data.pop('role')
                basic_pay = data.pop('basic_pay')
                password = data.pop('password')

                # Create user
                user = User.objects.create_user(
                    password=password,
                    **data
                )

                # Create employee
                Employee.objects.create(
                    user=user,
                    role=role,
                    basic_pay=Decimal(str(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 {data["username"]}: {str(e)}')
                )
