from django.core.management.base import BaseCommand
from django.db import transaction

from staff.constants import SPECIALIST_ROLES
from staff.models import StaffMember
from staff.services import StaffRegistrationService


class Command(BaseCommand):
    help = "Create the priced specialist catalogue without changing hired staff."

    def add_arguments(self, parser):
        parser.add_argument("--copies", type=int, default=3)

    @transaction.atomic
    def handle(self, *args, **options):
        created = 0
        for role in SPECIALIST_ROLES:
            for tier, rating, level, salary in [
                ("AMATEUR", 40, 1, 5),
                ("NORMAL", 55, 2, 12),
                ("PROFESSIONAL", 75, 4, 25),
                ("SUPERSTAR", 90, 5, 50),
            ]:
                for number in range(1, max(1, min(options["copies"], 100)) + 1):
                    key = f"{role}:{tier}:{number}"
                    if StaffMember.objects.filter(catalog_key=key).exists():
                        continue
                    member = StaffRegistrationService.create_specialist(
                        specialty=role,
                        first_name=f"{tier.title()} {number}",
                        last_name=role.replace("_", " ").title(),
                        nationality="IR",
                        level=level,
                        leadership=rating,
                        tactical=rating,
                        development=rating,
                        fitness=rating,
                        goalkeeping=rating,
                    )
                    member.tier, member.minimum_salary, member.catalog_key = (
                        tier,
                        salary,
                        key,
                    )
                    member.save(update_fields=["tier", "minimum_salary", "catalog_key"])
                    created += 1
        self.stdout.write(f"Created {created} specialists.")
