import asyncio
import logging
from sqlalchemy import text
from app.database import AsyncSessionLocal

logging.basicConfig(level=logging.INFO, format='%(asctime)s [OPTIMIZER] %(message)s')
logger = logging.getLogger("Efficiency-Optimizer")

async def optimize_queue():
    async with AsyncSessionLocal() as db:
        try:
            # 1. FÁZIS: AUTO-GOLD (Ami már kész van, ne menjen AI-hoz)
            # Ha az UltimateSpecs vagy az RDW már kitöltötte a lényeget, lőjük Aranyba!
            logger.info("🚀 1. Fázis: Auto-Gold ellenőrzés indítása...")
            auto_gold_query = text("""
                UPDATE vehicle.vehicle_model_definitions
                SET status = 'gold_enriched', 
                    updated_at = NOW(),
                    source = source || ' + AUTO_GOLD'
                WHERE status = 'awaiting_ai_synthesis'
                  AND power_kw > 0 
                  AND engine_capacity > 0 
                  AND fuel_type != 'Unknown'
                  AND body_type IS NOT NULL
                  AND trim_level != ''
                RETURNING id;
            """)
            result = await db.execute(auto_gold_query)
            logger.info(f"✅ {len(result.fetchall())} járművet automatikusan ARANY státuszba emeltem (AI megspórolva).")

            # 2. FÁZIS: DEDUPLIKÁCIÓ (Katalógus összehasonlítás)
            # Keressük azokat a várakozókat, amiknek már van egy ARANY párjuk
            logger.info("🚀 2. Fázis: Duplikációk szűrése a katalógus alapján...")
            dedup_query = text("""
                UPDATE vehicle.vehicle_model_definitions AS pending
                SET status = 'merged_duplicate',
                    updated_at = NOW()
                FROM vehicle.vehicle_model_definitions AS gold
                WHERE pending.status = 'awaiting_ai_synthesis'
                  AND gold.status = 'gold_enriched'
                  AND pending.make = gold.make
                  AND pending.normalized_name = gold.normalized_name
                  AND pending.year_from = gold.year_from
                  AND pending.fuel_type = gold.fuel_type
                  AND pending.market = gold.market
                  AND pending.id != gold.id
                RETURNING pending.id;
            """)
            result = await db.execute(dedup_query)
            logger.info(f"🗑️ {len(result.fetchall())} duplikált várakozót töröltem a sorból (Már van Arany párjuk).")

            await db.commit()
            logger.info("🏆 Optimalizálás befejezve. A sor megtisztítva!")

        except Exception as e:
            await db.rollback()
            logger.error(f"❌ Hiba az optimalizálás során: {e}")

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