# /opt/docker/dev/service_finder/backend/app/tests_internal/seeds/seed_test_scenario.py
import asyncio
import uuid
import logging
from datetime import datetime, timedelta, timezone
from sqlalchemy import select
from app.database import AsyncSessionLocal
from app.models.identity import User
from app.models.marketplace.organization import Organization, OrganizationMember, OrgType
from app.models import (
    Asset, AssetCatalog, AssetTelemetry, 
    AssetFinancials, AssetCost
)

# Sentinel naplózás
logging.basicConfig(level=logging.INFO, format='%(asctime)s [%(levelname)s] Sentinel-Scenario: %(message)s')
logger = logging.getLogger("Test-Scenario")

async def seed_test_scenario():
    async with AsyncSessionLocal() as db:
        logger.info("🚀 MB2.0 Teszt ökoszisztéma felépítése indul...")

        # 1. LOGIKA: Admin (Superuser) lekérése az identity sémából
        res = await db.execute(select(User).where(User.is_active == True))
        admin = res.scalars().first()
        
        if not admin:
            logger.error("❌ Hiba: Nincs aktív felhasználó a rendszerben. Futtasd a seed_system.py-t!")
            return

        # 2. LOGIKA: Szervezeti struktúra felállítása
        # Privát garázs
        private_org = Organization(
            name="Kincses Privát", 
            full_name="Kincses Magánflotta és Garázs",
            org_type=OrgType.individual,
            owner_id=admin.id,
            folder_slug="kincses-privat-vault"
        )
        # Üzleti flotta
        company_org = Organization(
            name="ProfiBot Fleet", 
            full_name="ProfiBot Software Solutions Kft.",
            org_type=OrgType.business,
            owner_id=admin.id,
            folder_slug="profibot-fleet-vault"
        )
        # Szolgáltatók (Szerviz és Üzemanyag)
        service_org = Organization(
            name="Mester Szerviz", 
            org_type=OrgType.service,
            owner_id=admin.id,
            is_active=True
        )
        
        db.add_all([private_org, company_org, service_org])
        await db.flush()

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

        # 3. LOGIKA: Tesla Model 3 - Digitális Iker (Digital Twin)
        # Előbb a katalógus (Gold Data)
        catalog = AssetCatalog(
            make="TESLA", model="MODEL 3", generation="Long Range (2021-)",
            fuel_type="electric",
            factory_data={
                "battery": "75 kWh", "power_kw": 366, 
                "tire_size": "235/45 R18", "ac_charge": "11kW"
            }
        )
        db.add(catalog)
        await db.flush()

        # Majd a konkrét jármű (Asset)
        vehicle = Asset(
            vin=f"5YJ3E1EB8LF{uuid.uuid4().hex[:6].upper()}", 
            license_plate="TES-777-EV",
            name="Céges Tesla", 
            year_of_manufacture=2021,
            catalog_id=catalog.id,
            owner_org_id=company_org.id,
            status="active"
        )
        db.add(vehicle)
        await db.flush()

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

        # 4. LOGIKA: A 9 költségtípus szimulálása
        costs_data = [
            ("FUEL", 12500, "Supercharger töltés"),
            ("MAINTENANCE", 85000, "Pollenszűrő és átvizsgálás"),
            ("TIRES", 280000, "Téli gumi szett"),
            ("INSURANCE", 32000, "Havi CASCO"),
            ("TAX", 15000, "Cégautóadó (szimulált)"),
            ("TOLL", 6500, "Éves matrica"),
            ("CLEANING", 4500, "Külső-belső takarítás"),
            ("PARKING", 1200, "Belvárosi zóna"),
            ("OTHER", 2500, "Szélvédőmosó folyadék")
        ]

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

        await db.commit()
        logger.info("✅ Siker! A teljes flotta-ökoszisztéma üzemkész.")

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