import httpx
import logging
from config.settings import settings

logger = logging.getLogger("precalc-helper")

# URL base del backend Java (configurada o por defecto)
BACKAGROTA_URL = getattr(settings, "BACKAGROTA_BASE_URL", "http://localhost:8085/lhia_agrota")
API_KEY = getattr(settings, "CLIENT_API_KEY", "admin123")

def get_headers():
    return {"X-API-KEY": API_KEY, "Content-Type": "application/json"}

import time

# Caché en memoria de arquetipos
_archetype_cache = {"data": [], "last_updated": 0}
CACHE_TTL_SECONDS = 600 # 10 minutos

async def get_active_archetypes():
    """Recupera la lista de arquetipos con caché de 10 minutos."""
    now = time.time()
    if _archetype_cache["data"] and (now - _archetype_cache["last_updated"] < CACHE_TTL_SECONDS):
        return _archetype_cache["data"]

    try:
        async with httpx.AsyncClient() as client:
            response = await client.get(f"{BACKAGROTA_URL}/api/v1/precalc/configs", headers=get_headers(), timeout=5.0)
            if response.status_code == 200:
                data = response.json()
                _archetype_cache["data"] = data
                _archetype_cache["last_updated"] = now
                return data
            return _archetype_cache["data"] or []
    except Exception as e:
        logger.error(f"Error recuperando arquetipos de Java: {e}")
        return _archetype_cache["data"] or []

async def get_cached_result(archetype_key: str):
    """Recupera el resultado JSON del caché de Java."""
    try:
        async with httpx.AsyncClient() as client:
            response = await client.get(
                f"{BACKAGROTA_URL}/api/v1/precalc/result", 
                params={"archetypeKey": archetype_key},
                headers=get_headers(),
                timeout=10.0
            )
            if response.status_code == 200:
                return response.json()
            return None
    except Exception as e:
        logger.error(f"Error recuperando caché para {archetype_key}: {e}")
        return None

async def save_archetype_to_backend(question: str, dax_query: str, category: str):
    """Enregistra una nueva pregunta y su DAX como arquetipo en el backend Java."""
    try:
        payload = {
            "sampleQuestion": question,
            "daxQuery": dax_query,
            "category": category
        }
        async with httpx.AsyncClient() as client:
            response = await client.post(
                f"{BACKAGROTA_URL}/api/v1/precalc/configs",
                json=payload,
                headers=get_headers(),
                timeout=5.0
            )
            if response.status_code == 200:
                logger.info(f"Nuevo arquetipo auto-registrado: {question}")
    except Exception as e:
        logger.error(f"Error auto-registrando arquetipo: {e}")
