import asyncio
import json
import re
import requests
from sqlalchemy import text
from app.database import AsyncSessionLocal

# --- TECHNIKAI SZÓTÁR ÉS MAPPING ---
# Ez a szótár fordítja le az UltimateSpecs kulcsokat az adatbázis oszlopneveire
MAPPING = {
    "Maximum power": "power_kw",
    "Engine capacity": "engine_capacity",
    "Maximum torque": "torque_nm",
    "Top Speed": "max_speed",
    "Acceleration 0 to 100 km/h": "acceleration_0_100",
    "Curb Weight": "curb_weight",
    "Wheelbase": "wheelbase",
    "Num. of Seats": "seats",
    "Drive wheels - Traction - Layout": "drive_type",
    "Body": "body_type"
}

async def r5_test_run():
    print("🚀 R5 Hibrid Robot indítása (Teszt üzemmód)...")
    
    async with AsyncSessionLocal() as db:
        # 1. KIVÁLASZTÁS: Kiveszünk egy olyan autót, ami még nincs dúsítva (R1 bázisból)
        query = text("""
            SELECT id, make, marketing_name, year_from, technical_code, fuel_type
            FROM vehicle.vehicle_model_definitions
            WHERE (power_kw IS NULL OR power_kw = 0 OR engine_capacity IS NULL OR engine_capacity = 0)
                AND status IN ('manual_review_needed', 'research_failed_empty', 'pending', 'enrich_ready')
            ORDER BY priority_score DESC
            LIMIT 1
        """)
        target = (await db.execute(query)).fetchone()
        
        if not target:
            print("✨ Nincs feldolgozatlan autó az adatbázisban.")
            return

        t_id, make, model, year, tech_code, fuel = target
        print(f"🎯 Célpont: {make} {model} ({year})")
        print(f"📌 Technical Code: {tech_code or 'Nincs megadva'}")

        # 2. RDW ADATOK (Holland hatósági bázis)
        # Ha van technical_code (pl. Fiatnál a típusazonosító), az RDW-ből pontos adatot kapunk
        rdw_data = {}
        if tech_code:
            print("🇳🇱 RDW adatok lekérése...")
            # Az RDW API m9d7-ebf2 táblája tartalmazza a típus specifikációkat
            rdw_url = f"https://opendata.rdw.nl/resource/m9d7-ebf2.json?handelsbenaming={tech_code.upper()}"
            try:
                res = requests.get(rdw_url, timeout=5).json()
                if res:
                    rdw_data = {
                        "power_kw": int(float(res[0].get('nettomaximumvermogen', 0))),
                        "engine_capacity": int(res[0].get('cilinderinhoud', 0)),
                        "curb_weight": int(res[0].get('massa_ledig_voertuig', 0))
                    }
                    print("✅ RDW adatok sikeresen betöltve.")
            except:
                print("⚠️ RDW nem elérhető vagy nincs találat.")

        # 3. ULTIMATESPECS ADATOK (Szimulált kaparás a kért logika alapján)
        print("🏁 UltimateSpecs adatok gyűjtése...")
        # Itt futna a Playwright scraper, ami kinyeri a táblázatot
        # Példa nyers adatokra, amit az oldalról szedünk le:
        raw_web_data = {
            "Maximum power": "103 PS / 76 kW @ 5750 rpm",
            "Engine capacity": "1581 cm3",
            "Maximum torque": "144 Nm @ 4000 rpm",
            "Top Speed": "180 km/h",
            "Acceleration 0 to 100 km/h": "11.5 s",
            "Curb Weight": "1090 kg",
            "Wheelbase": "254 cm",
            "Body": "Hatchback"
        }

        # 4. ÖSSZEFŰZÉS ÉS FORDÍTÁS
        final_mdm_record = {
            "id": t_id,
            "make": make,
            "marketing_name": model,
            "year_from": year,
            "fuel_type": fuel
        }

        # Alkalmazzuk a mappinget és a regex tisztítást
        for web_key, db_key in MAPPING.items():
            val = raw_web_data.get(web_key)
            if val:
                # Számértékek kinyerése (pl. "76 kW" -> 76, "1581 cm3" -> 1581)
                numbers = re.findall(r'\d+', str(val))
                if numbers:
                    # Ha több szám van (pl. kW és LE), a relevánsat választjuk
                    final_mdm_record[db_key] = numbers[1] if "kW" in str(val) and len(numbers)>1 else numbers[0]
                else:
                    final_mdm_record[db_key] = val

        # RDW adatok prioritása (ezek a legpontosabbak, felülírják a webet)
        final_mdm_record.update({k: v for k, v in rdw_data.items() if v})

        # --- TERMINÁL KIMENET ---
        print("\n" + "="*50)
        print("📊 VÉGLEGES MDM REKORD (ELŐNÉZET)")
        print("="*50)
        print(json.dumps(final_mdm_record, indent=2, ensure_ascii=False))
        print("="*50)
        print("\n[R5] Ha az adatok rendben vannak, mehet az élesítés?")

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