"""
services/ui_service.py
=======================
Configuration de l'interface utilisateur depuis la base SQLite (table ui_features).
"""

from __future__ import annotations

import logging

import pymysql

from domain.db import get_db

logger = logging.getLogger(__name__)

_DEFAULT_SECTIONS = [
    {"feature_key": k, "label": l, "enabled": 1, "display_order": i + 1}
    for i, (k, l) in enumerate([
        ("iris",   "Quartiers IRIS"),    ("flood", "Zones inondables"),
        ("noise",  "Bruit"),             ("iso",   "Temps de trajet"),
        ("nature", "Espaces naturels"),  ("radon", "Radon"),
        ("rga",    "Argiles (RGA)"),     ("poi",   "Points d'intérêt"),
    ])
]

_ui_features_cache: dict | None = None


def get_ui_features() -> dict:
    """
    Returns sidebar feature configuration from the ui_features table.
    Result is cached for the lifetime of the process — UI config is static at runtime.
    Falls back to all-enabled defaults if the table doesn't exist yet.
    """
    global _ui_features_cache
    if _ui_features_cache is not None:
        return _ui_features_cache

    try:
        with get_db() as conn:
            rows = conn.execute(
                "SELECT feature_key, label, section, enabled, display_order"
                " FROM ui_features ORDER BY display_order"
            ).fetchall()
    except pymysql.Error:
        logger.debug("ui_features table absent — returning defaults")
        _ui_features_cache = {"sections": _DEFAULT_SECTIONS, "poi_types": []}
        return _ui_features_cache

    sections  = [dict(r) for r in rows if r["section"] == "main"]
    poi_types = [dict(r) for r in rows if r["section"] == "poi"]
    _ui_features_cache = {"sections": sections, "poi_types": poi_types}
    return _ui_features_cache
