# /opt/docker/dev/service_finder/backend/app/tests_internal/seeds/seed_catalog.py
"""
🌱 MB2.0 KATALÓGUS ÉS ROBOT SEEDER
----------------------------------
CÉL: A járműkatalógus alapadatainak és a robotok munkalistájának feltöltése.

FUNKCIÓK:
1. DiscoveryParameter: Azon városok rögzítése, ahol a Scout robot keresni fog.
2. CatalogDiscovery: Azon márkák rögzítése, amiket a Robot 0/1 fel fog dolgozni.
3. AssetCatalog: 'Arany' (már validált) technikai rekordok beszúrása.

JAVÍTÁSOK:
- 'last_error' oszlop eltávolítva (mivel az adatbázisban nem létezik).
- 'attempts' mező kényszerített 0 értékkel (NOT NULL kényszer miatt).
"""

import asyncio
import logging
from sqlalchemy.dialects.postgresql import insert
from app.database import AsyncSessionLocal
from app.models import AssetCatalog, CatalogDiscovery
from app.models.marketplace.staged_data import DiscoveryParameter

# Logolás beállítása
logging.basicConfig(level=logging.INFO, format='%(asctime)s [%(levelname)s] Sentinel-Seed: %(message)s')
logger = logging.getLogger("Seed-Catalog")

async def quick_seed():
    """ Katalógus és Discovery adatok inicializálása. """
    async with AsyncSessionLocal() as db:
        logger.info("🚀 Katalógus alapozás indítása...")
        
        try:
            # 1. Felderítendő Városok (DiscoveryParameter)
            # A Scout robot ezekben a városokban kezdi meg a szervizek kutatását.
            cities = [
                ("BUDAPEST", "HU"),
                ("DEBRECEN", "HU"),
                ("GYŐR", "HU"),
                ("SZEGED", "HU")
            ]
            
            for city_name, country in cities:
                db.add(DiscoveryParameter(
                    city=city_name,
                    keyword=country,
                    is_active=True
                ))

            # 2. Felderítendő Márkák és Típusok (CatalogDiscovery)
            # Ezeket a rekordokat fogja a Robot 0 és Robot 1 feldolgozni a háttérben.
            discovery_queue = [
                ("SUZUKI", "ALL"),
                ("TOYOTA", "ALL"),
                ("HONDA", "ALL"),
                ("SKODA", "ALL"),
                ("YAMAHA", "ALL")
            ]
            
            # Use INSERT ... ON CONFLICT DO NOTHING to avoid duplicate key errors
            for m, mod in discovery_queue:
                stmt = insert(CatalogDiscovery).values(
                    make=m,
                    model=mod,
                    status="pending",
                    attempts=0,
                    vehicle_class="car",  # Default value
                    market="GLOBAL",      # Default value
                    priority_score=0      # Default value
                )
                # Handle conflict on make+model+vehicle_class unique constraint
                stmt = stmt.on_conflict_do_nothing(index_elements=['make', 'model', 'vehicle_class'])
                await db.execute(stmt)

            # 3. Arany rekordok (AssetCatalog / vehicle_catalog tábla)
            # Példa adatok, amik már átmentek a validációs folyamaton.
            gold_data = [
                AssetCatalog(
                    make="SUZUKI", 
                    model="VITARA", 
                    generation="LY (2015-)", 
                    fuel_type="petrol",
                    factory_data={"segment": "SUV", "origin": "Hungary"}
                ),
                AssetCatalog(
                    make="SKODA", 
                    model="OCTAVIA", 
                    generation="IV (2020-)", 
                    fuel_type="diesel",
                    factory_data={"segment": "Sedan/Combi"}
                )
            ]
            db.add_all(gold_data)
            
            # Mentés végrehajtása
            await db.commit()
            logger.info("✨ Katalógus és Discovery paraméterek sikeresen rögzítve!")

        except Exception as e:
            await db.rollback()
            logger.error(f"❌ HIBA a katalógus feltöltésekor: {e}")
            raise e

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