# /opt/docker/dev/service_finder/backend/app/services/recon_bot.py
import asyncio
import logging
from datetime import datetime, timezone
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select
from app.models import Asset, AssetCatalog, AssetTelemetry

logger = logging.getLogger(__name__)

async def run_vehicle_recon(db: AsyncSession, asset_id: str):
    """
    VIN alapján megkeresi a mélységi adatokat és frissíti a Digitális Ikert.
    """
    stmt = select(Asset).where(Asset.id == asset_id)
    asset = (await db.execute(stmt)).scalar_one_or_none()
    
    if not asset or not asset.catalog_id:
        return False

    logger.info(f"🤖 Robot indul: {asset.vin} felderítése...")
    
    # --- LOGIKA MEGŐRIZVE: Szimulált mélységi adatgyűjtés ---
    await asyncio.sleep(2) 
    
    deep_data = {
        "assembly_plant": "Fremont, California",
        "drive_unit": "Dual Motor - Raven type",
        "onboard_charger": "11 kW",
        "supercharging_max": "250 kW",
        "safety_rating": "5-star EuroNCAP",
        "recon_timestamp": datetime.now(timezone.utc).isoformat()
    }

    # 3. Katalógus frissítése (MDM elv)
    catalog = (await db.execute(select(AssetCatalog).where(AssetCatalog.id == asset.catalog_id))).scalar_one_or_none()
    if catalog:
        current_data = catalog.factory_data or {}
        current_data.update(deep_data)
        catalog.factory_data = current_data
        
    # 4. Telemetria frissítése (VQI score csökkentése a logika szerint)
    telemetry = (await db.execute(select(AssetTelemetry).where(AssetTelemetry.asset_id == asset.id))).scalar_one_or_none()
    if telemetry:
        telemetry.vqi_score = 99.2 

    await db.commit()
    logger.info(f"✨ Robot végzett: {asset.license_plate or asset.vin} felokosítva.")
    return True