import asyncio
import uuid
from datetime import datetime, timedelta
from sqlalchemy import select
from app.db.session import SessionLocal
from app.models import (
    User, Organization, OrganizationMember, Asset, AssetCatalog, 
    AssetTelemetry, AssetFinancials, AssetCost, AssetEvent
)
from app.models.organization import OrgType

async def seed_test_scenario():
    async with SessionLocal() as db:
        print("🚀 Teszt ökoszisztéma felépítése a meglévő modellek alapján...")

        # 1. Admin lekérése
        admin = (await db.execute(select(User))).scalars().first()
        if not admin:
            print("❌ Hiba: Nincs admin az adatbázisban!")
            return

        # 2. SZERVEZETEK (A te OrgType enumod alapján)
        # Privát flotta
        private_org = Organization(
            name="Kincses Privát", 
            full_name="Kincses Magánflotta és Garázs",
            org_type=OrgType.individual,
            owner_id=admin.id
        )
        # Céges flotta (OrgType.business-t használunk!)
        company_org = Organization(
            name="ProfiBot Fleet", 
            full_name="ProfiBot Software Solutions Kft.",
            org_type=OrgType.business,
            owner_id=admin.id
        )
        # Szolgáltatók
        service_org = Organization(
            name="Mester Szerviz", 
            full_name="Mester Autójavító és Vizsgabázis Kft.",
            org_type=OrgType.service,
            owner_id=admin.id
        )
        gas_station = Organization(
            name="MOL Digit", 
            full_name="MOL Digitális Töltőállomás 001",
            org_type=OrgType.service_provider, # OrgType.service_provider-t használunk!
            owner_id=admin.id
        )
        
        db.add_all([private_org, company_org, service_org, gas_station])
        await db.flush()

        # Tagságok rögzítése
        db.add(OrganizationMember(user_id=admin.id, organization_id=private_org.id, role="owner"))
        db.add(OrganizationMember(user_id=admin.id, organization_id=company_org.id, role="owner"))

        # 3. RÉTESZLETES JÁRMŰ ADAT (Tesla Model 3)
        catalog = AssetCatalog(
            make="Tesla", model="Model 3", generation="Long Range",
            year_from=2021, fuel_type="Electric",
            factory_data={
                "battery": "75 kWh", "power": "366 kW", "torque": "493 Nm",
                "tire_size": "235/45 R18", "oil_type": "None (EV)"
            }
        )
        db.add(catalog)
        await db.flush()

        vehicle = Asset(
            vin="5YJ3E1EB8LF000000", license_plate="TES-777-EV",
            name="Főnök Teslája", year_of_manufacture=2021,
            catalog_id=catalog.id, status="active"
        )
        db.add(vehicle)
        await db.flush()

        # Telemetria és Pénzügyi modulok
        db.add(AssetTelemetry(asset_id=vehicle.id, current_mileage=45200, vqi_score=100.0, dbs_score=100.0))
        db.add(AssetFinancials(asset_id=vehicle.id, acquisition_price=18500000))

        # 4. KÖLTSÉGEK (9 kategória szimulálása)
        costs_data = [
            ("FUEL", 15000, "Szupertöltés MOL", gas_station.id),
            ("MAINTENANCE", 120000, "Éves szerviz + fékfolyadék", service_org.id),
            ("TIRES", 240000, "Michelin Pilot Sport szett", None),
            ("INSURANCE", 45000, "Allianz Casco", None),
            ("TAX", 0, "Zöld rendszám kedvezmény", None),
            ("TOLL", 5500, "Pest megyei e-matrica", None),
            ("CLEANING", 8500, "Nano bevonat + Mosás", None),
            ("PARKING", 2400, "Airport Parking", None),
            ("FINE", 0, "Nincs aktív bírság", None)
        ]

        for c_type, amount, desc, vendor_id in costs_data:
            db.add(AssetCost(
                asset_id=vehicle.id, organization_id=company_org.id,
                cost_type=c_type, amount=amount, currency="HUF",
                data={"description": desc, "vendor_id": vendor_id},
                date=datetime.now() - timedelta(days=2)
            ))

        await db.commit()
        print("✅ Siker! Flották, Tesla és a 9 költségtípus rögzítve.")

if __name__ == "__main__":
    asyncio.run(seed_test_scenario())