# /opt/docker/dev/service_finder/backend/app/services/dvla_service.py
import httpx
import logging
from typing import Optional, Dict, Any
from sqlalchemy.ext.asyncio import AsyncSession

from app.services.config_service import config # 2.0 Dinamikus konfig
from app.db.session import AsyncSessionLocal

logger = logging.getLogger("DVLA-Service-2.2")

class DVLAService:
    """
    Sentinel Master DVLA Service 2.2.
    Felelős a brit járműadatok lekéréséért a hivatalos állami API-n keresztül.
    """

    @classmethod
    async def get_vehicle_details(cls, db: AsyncSession, vrm: str) -> Optional[Dict[str, Any]]:
        """
        VRM (Vehicle Registration Mark) lekérdezése dinamikus admin beállításokkal.
        """
        try:
            # 1. ADMIN BEÁLLÍTÁSOK LEKÉRÉSE
            # Megnézzük, engedélyezve van-e a szolgáltatás
            is_enabled = await config.get_setting(db, "dvla_api_enabled", default=True)
            if not is_enabled:
                logger.info("DVLA lekérdezés kihagyva (Admin által letiltva).")
                return None

            api_url = await config.get_setting(
                db, "dvla_api_url", 
                default="https://driver-vehicle-licensing.api.gov.uk/vehicle-enquiry/v1/vehicles"
            )
            api_key = await config.get_setting(db, "dvla_api_key")

            if not api_key:
                logger.error("DVLA API kulcs hiányzik a system_parameters táblából!")
                return None

            # 2. HITELESÍTÉS ÉS LEKÉRDEZÉS
            headers = {
                "x-api-key": api_key,
                "Content-Type": "application/json"
            }
            # A DVLA szigorúan nagybetűs, szóköz nélküli rendszámot vár
            clean_vrm = vrm.replace(" ", "").upper().strip()
            payload = {"registrationNumber": clean_vrm}

            async with httpx.AsyncClient(timeout=15.0) as client:
                response = await client.post(api_url, json=payload, headers=headers)
                
                if response.status_code == 200:
                    logger.info(f"✅ DVLA adat sikeresen lekérve: {clean_vrm}")
                    return response.json()
                
                elif response.status_code == 404:
                    logger.warning(f"⚠️ Jármű nem található a DVLA adatbázisában: {clean_vrm}")
                    return None
                
                elif response.status_code == 429:
                    logger.error("🚨 DVLA API hiba: Túl sok kérés (Rate Limit)!")
                    return {"error": "rate_limited"}

                else:
                    logger.error(f"❌ DVLA API hiba ({response.status_code}): {response.text}")
                    return None

        except Exception as e:
            logger.error(f"⚠️ DVLAService Kritikus Hiba: {e}")
            return None