from datetime import date, timedelta
from django.core.management.base import BaseCommand
from apps.asset_management.models import Asset, AssetCategory, AssetLocation, Vendor

# Vehicle fleet — edit this list to match the real fleet before running on prod.
# asset_tag is the unique key; re-running skips tags that already exist.
VEHICLES = [
    {
        "asset_tag": "VEH-0001",
        "name": "Toyota Innova Zenix 2023",
        "serial_number": "MHFGB8EM0P4023441",  # VIN / chassis number
        "purchase_price": 420000000,
        "purchase_date": date(2023, 3, 15),
        "warranty_months": 36,
        "specs": {"subcategory": "Car", "department": "Operations", "condition": "good",
                  "brand": "Toyota", "model": "Innova Zenix", "year": 2023,
                  "engine": "2.0L HEV", "transmission": "E-CVT", "fuel": "Hybrid",
                  "color": "Silver Metallic", "seats": 7, "plate_number": "B 1234 KHB"},
    },
    {
        "asset_tag": "VEH-0002",
        "name": "Toyota Avanza 2022",
        "serial_number": "MHKM1BA3JNK512280",
        "purchase_price": 245000000,
        "purchase_date": date(2022, 7, 8),
        "warranty_months": 36,
        "specs": {"subcategory": "Car", "department": "Operations", "condition": "good",
                  "brand": "Toyota", "model": "Avanza", "year": 2022,
                  "engine": "1.5L", "transmission": "Automatic", "fuel": "Petrol",
                  "color": "White", "seats": 7, "plate_number": "B 5678 KHB"},
    },
    {
        "asset_tag": "VEH-0003",
        "name": "Mitsubishi L300 Pickup 2021",
        "serial_number": "MMBJNKB40MD028914",
        "purchase_price": 230000000,
        "purchase_date": date(2021, 11, 20),
        "warranty_months": 36,
        "specs": {"subcategory": "Van", "department": "Logistics", "condition": "fair",
                  "brand": "Mitsubishi", "model": "L300", "year": 2021,
                  "engine": "2.5L Diesel", "transmission": "Manual", "fuel": "Diesel",
                  "color": "White", "seats": 3, "plate_number": "B 9012 KHC"},
    },
    {
        "asset_tag": "VEH-0004",
        "name": "Honda PCX 160 2023",
        "serial_number": "MH1KF211XPK104882",
        "purchase_price": 33000000,
        "purchase_date": date(2023, 1, 30),
        "warranty_months": 36,
        "specs": {"subcategory": "Motorcycle", "department": "Operations", "condition": "good",
                  "brand": "Honda", "model": "PCX 160", "year": 2023,
                  "engine": "157cc", "transmission": "CVT", "fuel": "Petrol",
                  "color": "Matte Black", "seats": 2, "plate_number": "B 3456 KHD"},
    },
    {
        "asset_tag": "VEH-0005",
        "name": "Daihatsu Gran Max Blind Van 2020",
        "serial_number": "MHKP3BA1JLK339027",
        "purchase_price": 165000000,
        "purchase_date": date(2020, 9, 5),
        "warranty_months": 36,
        "specs": {"subcategory": "Van", "department": "Logistics", "condition": "fair",
                  "brand": "Daihatsu", "model": "Gran Max Blind Van", "year": 2020,
                  "engine": "1.3L", "transmission": "Manual", "fuel": "Petrol",
                  "color": "Silver", "seats": 2, "plate_number": "B 7890 KHE"},
    },
]


class Command(BaseCommand):
    help = "Seed vehicle assets (category 'Vehicles'). Idempotent — skips existing asset_tags. Safe for prod."

    def add_arguments(self, parser):
        parser.add_argument("--dry-run", action="store_true", help="Show what would be created without writing.")

    def handle(self, *args, **options):
        dry = options["dry_run"]

        category, _ = AssetCategory.objects.get_or_create(
            name="Vehicles",
            defaults={"description": "Vehicles assets", "depreciation_rate": 20},
        )
        location, _ = AssetLocation.objects.get_or_create(
            name="HQ Jakarta",
            defaults={
                "address": "Jl. Sudirman No. 1, Jakarta Selatan",
                "contact_person": "Facility Manager",
                "contact_phone": "021-5550000",
            },
        )
        vendor, _ = Vendor.objects.get_or_create(
            name="PT Toyota Astra Motor",
            defaults={
                "contact_person": "Fajar Nugroho",
                "email": "fajar@toyota.co.id",
                "phone": "021-5557890",
                "address": "Jakarta Timur, DKI Jakarta 13930",
                "tax_id": "01.234.567.8-000.007",
            },
        )

        created, skipped = 0, 0
        for v in VEHICLES:
            if Asset.objects.filter(asset_tag=v["asset_tag"]).exists():
                self.stdout.write(f"  Skip existing: {v['asset_tag']} — {v['name']}")
                skipped += 1
                continue

            if dry:
                self.stdout.write(f"  Would create: {v['asset_tag']} — {v['name']}")
                created += 1
                continue

            warranty_expiry = v["purchase_date"] + timedelta(days=30 * v["warranty_months"])
            Asset.objects.create(
                name=v["name"],
                asset_tag=v["asset_tag"],
                serial_number=v["serial_number"],
                category=category,
                status="available",
                location=location,
                vendor=vendor,
                purchase_date=v["purchase_date"],
                purchase_price=v["purchase_price"],
                warranty_expiry=warranty_expiry,
                description=f"{v['name']} — {v['specs']['subcategory']} used by {v['specs']['department']} department.",
                specifications=v["specs"],
            )
            self.stdout.write(f"  Created: {v['asset_tag']} — {v['name']}")
            created += 1

        verb = "Would create" if dry else "Created"
        self.stdout.write(self.style.SUCCESS(f"Done. {verb}: {created}, skipped: {skipped}."))
