# /opt/docker/dev/service_finder/backend/app/workers/vehicle/vehicle_robot_0_gb_discovery.py
import asyncio
import logging
import csv
import os
import sys
from sqlalchemy import text
from app.database import AsyncSessionLocal

logging.basicConfig(level=logging.INFO, format='%(asctime)s [%(levelname)s] Robot-0-GB: %(message)s', stream=sys.stdout)
logger = logging.getLogger("Robot-0-GB-Discovery")

class GBDiscoveryEngine:
    """ 
    UK Open Data (CSV) beolvasó.
    Célja a valós brit rendszámok kinyerése API hívások számára.
    """
    CSV_FILE_PATH = "/mnt/nas/app_data/uk_mot_data.csv" # Ide kell majd betenned a letöltött CSV-t

    @classmethod
    async def process_csv(cls):
        if not os.path.exists(cls.CSV_FILE_PATH):
            logger.warning(f"Nincs CSV fájl a {cls.CSV_FILE_PATH} útvonalon. Alvás...")
            return

        logger.info("🇬🇧 GB Discovery: CSV feldolgozás indítása...")
        inserted = 0
        
        # Létrehozzuk a GB várólistát (ha még nem létezne)
        async with AsyncSessionLocal() as db:
            await db.execute(text("""
                CREATE TABLE IF NOT EXISTS vehicle.gb_catalog_discovery (
                    id SERIAL PRIMARY KEY,
                    vrm VARCHAR(20) UNIQUE NOT NULL,
                    make VARCHAR(100),
                    model VARCHAR(100),
                    status VARCHAR(20) DEFAULT 'pending'
                );
            """))
            await db.commit()

            # CSV olvasás (Példa oszlopok: vrm, make, model)
            with open(cls.CSV_FILE_PATH, mode='r', encoding='utf-8') as file:
                reader = csv.DictReader(file)
                for row in reader:
                    vrm = row.get("vrm", "").strip().replace(" ", "").upper()
                    make = row.get("make", "").strip().upper()
                    model = row.get("model", "").strip().upper()
                    
                    if not vrm or not make: continue

                    # Szűrünk: Csak akkor tesszük be, ha ez az autó még nincs gold_enriched állapotban!
                    query = text("""
                        INSERT INTO vehicle.gb_catalog_discovery (vrm, make, model)
                        SELECT :vrm, :make, :model
                        WHERE NOT EXISTS (
                            SELECT 1 FROM vehicle.vehicle_model_definitions
                            WHERE make = :make AND marketing_name = :model AND status = 'gold_enriched'
                        )
                        ON CONFLICT (vrm) DO NOTHING;
                    """)
                    res = await db.execute(query, {"vrm": vrm, "make": make, "model": model})
                    if res.rowcount > 0:
                        inserted += 1
                        
                    # Időnként commitolunk, hogy ne egye meg a RAM-ot
                    if inserted % 1000 == 0:
                        await db.commit()
                        logger.info(f"Edig betöltve: {inserted} új GB rendszám...")
            
            await db.commit()
        logger.info(f"✅ GB CSV Feldolgozva. Új rendszámok a várólistán: {inserted}")

    @classmethod
    async def run(cls):
        while True:
            await cls.process_csv()
            await asyncio.sleep(86400) # Napi 1x fut le (24 óra)

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