#!/usr/bin/env python3
"""
TCO (Total Cost of Ownership) alap költségkategóriák seedelése.
Rendszerszintű kategóriák (is_system=True) amelyek nem törölhetők.
"""

import asyncio
import sys
from sqlalchemy import text
from sqlalchemy.ext.asyncio import AsyncSession

# A projekt gyökérből importáljuk a database modult
sys.path.insert(0, '/opt/docker/dev/service_finder/backend')
from app.database import AsyncSessionLocal
from app.models.vehicle import CostCategory


# A 10 alap TCO kategória definíciója
SYSTEM_CATEGORIES = [
    {
        "code": "FUEL",
        "name": "Üzemanyag / Töltés",
        "description": "Benzin, dízel, elektromos töltés, LPG, hidrogén"
    },
    {
        "code": "MAINTENANCE",
        "name": "Szerviz & Karbantartás",
        "description": "Olajcsere, szűrők, fékbetét, futómű, egyéb szerviz munkák"
    },
    {
        "code": "TIRES",
        "name": "Gumiabroncsok",
        "description": "Nyári/téli gumik, felni, kiegyensúlyozás, gumicsere"
    },
    {
        "code": "INSURANCE",
        "name": "Biztosítás",
        "description": "KASCO, kötelező gépjármű-felelősségbiztosítás, casco, utasbiztosítás"
    },
    {
        "code": "TAX",
        "name": "Adók",
        "description": "Gépjárműadó, forgalmi adó, közlekedési adó"
    },
    {
        "code": "FEES",
        "name": "Útdíj & Parkolás",
        "description": "Autópálya matrica, parkolási díjak, városi belépési díjak"
    },
    {
        "code": "ADMIN",
        "name": "Hatósági díjak",
        "description": "Műszaki vizsga, forgalmi engedély, okmányok, adminisztratív költségek"
    },
    {
        "code": "FINANCE",
        "name": "Finanszírozás",
        "description": "Lízing díj, hiteltörlesztés, kamatok, banki költségek"
    },
    {
        "code": "CLEANING",
        "name": "Ápolás & Kozmetika",
        "description": "Autómosás, polírozás, belső tisztítás, festékvédelem"
    },
    {
        "code": "OTHER",
        "name": "Egyéb",
        "description": "Egyéb, nem besorolható költségek"
    }
]


async def seed_tco_categories():
    """
    Törli a meglévő kategóriákat és beszúrja a 10 rendszerszintű TCO kategóriát.
    """
    print("🚀 TCO költségkategóriák seedelése...")
    
    async with AsyncSessionLocal() as session:
        try:
            # 1. Tábla ürítése (TRUNCATE) - csak a seed kategóriák, ne érintse a felhasználói kategóriákat?
            # Mivel most csak rendszerszintűek vannak, töröljük az összeset
            print("  ↳ Tábla ürítése (TRUNCATE vehicle.cost_categories)...")
            await session.execute(text("TRUNCATE TABLE vehicle.cost_categories RESTART IDENTITY CASCADE"))
            await session.commit()
            
            # 2. Kategóriák beszúrása
            inserted = 0
            for cat_data in SYSTEM_CATEGORIES:
                category = CostCategory(
                    code=cat_data["code"],
                    name=cat_data["name"],
                    description=cat_data["description"],
                    is_system=True,
                    parent_id=None  # Jelenleg nincs hierarchia, később bővíthető
                )
                session.add(category)
                inserted += 1
            
            await session.commit()
            print(f"  ✅ {inserted} rendszerszintű kategória beszúrva.")
            
            # 3. Ellenőrzés
            result = await session.execute(text("SELECT COUNT(*) FROM vehicle.cost_categories"))
            count = result.scalar()
            print(f"  📊 vehicle.cost_categories táblában jelenleg {count} sor van.")
            
            # Listázás
            result = await session.execute(text("SELECT code, name FROM vehicle.cost_categories ORDER BY code"))
            rows = result.fetchall()
            print("  📋 Kategóriák listája:")
            for code, name in rows:
                print(f"    - {code}: {name}")
                
        except Exception as e:
            await session.rollback()
            print(f"  ❌ Hiba történt: {e}")
            raise


if __name__ == "__main__":
    asyncio.run(seed_tco_categories())
    print("🎉 TCO kategória seedelés sikeresen befejeződött.")