import asyncio
import os
from sqlalchemy.ext.asyncio import create_async_engine
from sqlalchemy import text
from dotenv import load_dotenv

load_dotenv()

raw_url = os.getenv("DATABASE_URL")
if not raw_url:
    raw_url = "postgresql://admin:PASSWORD_111@postgres-db:5432/service_finder"
DATABASE_URL = raw_url.replace("postgresql://", "postgresql+asyncpg://").replace("/service_finder_db", "/service_finder")

async def seed_cost_types():
    engine = create_async_engine(DATABASE_URL)
    async with engine.begin() as conn:
        print("🔨 Költség típusok tábla létrehozása...")
        await conn.execute(text("""
            CREATE TABLE IF NOT EXISTS ref.cost_types (
                code VARCHAR(50) PRIMARY KEY,
                name VARCHAR(100) NOT NULL,
                parent_code VARCHAR(50) REFERENCES ref.cost_types(code), -- Hierarchia!
                is_active BOOLEAN DEFAULT TRUE,
                sort_order INTEGER DEFAULT 0
            );
        """))
        
        print("📥 Adatok feltöltése...")
        # Először a szülők (Főkategóriák)
        parents = [
            ('FUEL', '⛽ Tankolás', 10),
            ('PURCHASE', '💰 Beszerzés / Pénzügy', 20),
            ('INSURANCE', '📄 Biztosítás', 30),
            ('TAX', '🏛️ Adó / Illeték', 40),
            ('SERVICE', '🔧 Szerviz', 50),
            ('OTHER', 'Egyéb', 99)
        ]
        for p in parents:
            await conn.execute(text("INSERT INTO ref.cost_types (code, name, sort_order) VALUES (:c, :n, :s) ON CONFLICT (code) DO NOTHING"), {"c": p[0], "n": p[1], "s": p[2]})

        # Aztán a gyerekek (Alkategóriák)
        children = [
            # Beszerzés
            ('PURCHASE_PRICE', 'Vételár', 'PURCHASE'),
            ('FINANCE_LEASE', 'Lízing díj', 'PURCHASE'),
            ('FINANCE_LOAN', 'Hitel törlesztő', 'PURCHASE'),
            ('IMPORT_FEE', 'Honosítás / Regadó', 'PURCHASE'),
            # Biztosítás
            ('INSURANCE_KGFB', 'Kötelező (KGFB)', 'INSURANCE'),
            ('INSURANCE_CASCO', 'Casco', 'INSURANCE'),
            ('INSURANCE_GAP', 'GAP', 'INSURANCE'),
            ('INSURANCE_ASSIST', 'Assistance', 'INSURANCE'),
            # Adó
            ('TAX_WEIGHT', 'Gépjárműadó (Súlyadó)', 'TAX'),
            ('TAX_COMPANY', 'Cégautóadó', 'TAX'),
            ('TAX_TRANSFER', 'Vagyonszerzési illeték', 'TAX'),
            ('TAX_OTHER', 'Egyéb adó', 'TAX'),
            # Szerviz
            ('SERVICE_MAINTENANCE', 'Kötelező karbantartás', 'SERVICE'),
            ('SERVICE_REPAIR', 'Javítás', 'SERVICE'),
            ('SERVICE_TIRE', 'Gumicsere', 'SERVICE'),
            ('SERVICE_MOT', 'Műszaki vizsga', 'SERVICE')
        ]
        for c in children:
            await conn.execute(text("INSERT INTO ref.cost_types (code, name, parent_code) VALUES (:c, :n, :p) ON CONFLICT (code) DO NOTHING"), {"c": c[0], "n": c[1], "p": c[2]})

    print("✅ KÉSZ! A tudás most már az adatbázisban van, nem a HTML-ben.")
    await engine.dispose()

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