from django.core.management.base import BaseCommand
from apps.master import models as master_models


# Mapping of existing names in DB to proper canonical names
INSURANCE_NAME_MAPPING = {
    "ICICI Lombard": "ICICI Lombard General Insurance Company Limited",
    "HDFC ERGO": "HDFC ERGO General Insurance Company Limited",
    "Bajaj Allianz": "Bajaj Allianz General Insurance Company Limited",
    "New India Assurance": "The New India Assurance Company Limited",
    "Tata AIG": "Tata AIG General Insurance Company Limited",
    "Reliance General": "Reliance General Insurance Company Limited",
    "Oriental Insurance": "The Oriental Insurance Company Limited",
    "United India Insurance": "United India Insurance Company Limited",
    "National Insurance": "National Insurance Company Limited",
}

# Full list of 24 IRDAI-approved insurance companies
ALL_IRDAI_INSURERS = [
    "National Insurance Company Limited",
    "The New India Assurance Company Limited",
    "The Oriental Insurance Company Limited",
    "United India Insurance Company Limited",

    "Acko General Insurance Limited",
    "Bajaj Allianz General Insurance Company Limited",
    "Cholamandalam MS General Insurance Company Limited",
    "Go Digit General Insurance Limited",
    "HDFC ERGO General Insurance Company Limited",
    "ICICI Lombard General Insurance Company Limited",
    "IFFCO Tokio General Insurance Company Limited",
    "Zurich Kotak General Insurance Company (India) Limited",
    "Liberty General Insurance Limited",
    "Magma HDI General Insurance Company Limited",
    "Navi General Insurance Limited",
    "Raheja QBE General Insurance Company Limited",
    "Reliance General Insurance Company Limited",
    "Royal Sundaram General Insurance Company Limited",
    "SBI General Insurance Company Limited",
    "Shriram General Insurance Company Limited",
    "Tata AIG General Insurance Company Limited",
    "Universal Sompo General Insurance Company Limited",
    "Zuno General Insurance Limited",
]


class Command(BaseCommand):
    help = "seed_insurance_companies"

    def handle(self, *args, **kwargs):
        updated_count = 0
        created_count = 0

        # Step 1: Update existing short names to canonical names
        for old_name, new_name in INSURANCE_NAME_MAPPING.items():
            qs = master_models.InsuranceCompanyMaster.objects.filter(name=old_name)

            if qs.exists():
                qs.update(name=new_name)
                updated_count += qs.count()

        # Step 2: Create missing insurers
        for name in ALL_IRDAI_INSURERS:
            obj, created = master_models.InsuranceCompanyMaster.objects.get_or_create(name=name)
            if created:
                created_count += 1

        self.stdout.write(
            self.style.SUCCESS(
                f"✅ Insurance companies seeded successfully. "
                f"Updated: {updated_count}, Created: {created_count}"
            )
        )
