# /opt/docker/dev/service_finder/backend/app/workers/brand_seeder.py
import asyncio
import httpx
import logging
from sqlalchemy import text
from app.db.session import AsyncSessionLocal

# Logolás beállítása a Sentinel monitorozáshoz
logging.basicConfig(level=logging.INFO, format='%(asctime)s [%(levelname)s] %(name)s: %(message)s')
logger = logging.getLogger("Smart-Seeder-v1.0.2")

async def seed_with_priority():
    """ 
    Feltölti a catalog_discovery táblát az RDW alapján.
    Logika: Csak azokat a márkákat keressük, amikből legalább 10 db fut az utakon,
    hogy ne szemeteljük tele a katalógust egyedi barkács-járművekkel.
    """
    
    # RDW SoQL lekérdezés: Márka (merk), Típus (voertuigsoort) és Darabszám (total)
    # A szerveroldali csoportosítás és szűrés (having total >= 10) miatt villámgyors.
    RDW_URL = (
        "https://opendata.rdw.nl/resource/m9d7-ebf2.json?"
        "$select=merk,voertuigsoort,count(*)%20as%20total"
        "&$group=merk,voertuigsoort"
        "&$having=total%20>=%2010"
    )
    
    logger.info("📥 Adatok lekérése az RDW-től prioritásos besoroláshoz...")
    
    async with httpx.AsyncClient(timeout=120) as client:
        try:
            resp = await client.get(RDW_URL)
            if resp.status_code != 200:
                logger.error(f"❌ RDW API hiba: {resp.status_code}")
                return
            
            raw_data = resp.json()
            logger.info(f"📊 {len(raw_data)} potenciális márka-kategória páros érkezett.")

            async with AsyncSessionLocal() as db:
                for entry in raw_data:
                    make = str(entry.get("merk", "")).upper().strip()
                    v_kind = entry.get("voertuigsoort", "")
                    
                    if not make:
                        continue

                    # --- PRIORITÁS LOGIKA (Master Book 2.0 szerint) ---
                    # 1. Személyautó (Personenauto) -> 'pending' (Azonnal feldolgozandó)
                    # 2. Motor (Motorfiets) -> 'queued_motor'
                    # 3. Minden más (Teher, Busz, Mezőgazdasági) -> 'queued_heavy'
                    
                    if "Personenauto" in v_kind:
                        status = 'pending'
                        v_class = 'car'
                    elif "Motorfiets" in v_kind:
                        status = 'queued_motor'
                        v_class = 'motorcycle'
                    else:
                        status = 'queued_heavy'
                        v_class = 'truck'

                    # UPSERT Logika: Ha már létezik, de még 'pending', akkor frissítjük a státuszt, 
                    # de nem írjuk felül a már feldolgozott (processed) rekordokat.
                    query = text("""
                        INSERT INTO data.catalog_discovery (make, model, vehicle_class, source, status)
                        VALUES (:make, 'ALL_VARIANTS', :v_class, 'smart_seeder_v1_0_2', :status)
                        ON CONFLICT (make, model, vehicle_class) 
                        DO UPDATE SET 
                            status = CASE 
                                WHEN data.catalog_discovery.status = 'pending' THEN EXCLUDED.status 
                                ELSE data.catalog_discovery.status 
                            END
                        WHERE data.catalog_discovery.make = EXCLUDED.make;
                    """)
                    
                    await db.execute(query, {
                        "make": make, 
                        "v_class": v_class,
                        "status": status
                    })
                
                await db.commit()
                logger.info("✅ Discovery lista sikeresen feltöltve és prioritizálva.")

        except Exception as e:
            logger.error(f"❌ Kritikus hiba a seeder futása közben: {e}")

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