"""Shared helpers for resolving service instances at request time.

Extracted from the duplicated ``_resolve_service_record`` helpers that lived
in ``routers/monitoring.py`` and ``routers/authentik_users.py``. Both routers
need the same logic: return the requested service instance (by id), or fall
back to the first enabled instance of the type. Returns ``None`` when the
instance does not exist, is the wrong type, is disabled, or when no enabled
instance of the type is configured.
"""

from __future__ import annotations

from media_library_viewer_api.services.settings_store import SettingsStore
from media_library_viewer_api.widgets.sources import ServiceRecord, build_service_record


def resolve_service_record(
    store: SettingsStore,
    service_type: str,
    service_id: str | None = None,
) -> ServiceRecord | None:
    """Return the requested service instance, else the first enabled one.

    Returns ``None`` when the instance does not exist / is the wrong type, or
    when no enabled instance of ``service_type`` is configured.
    """
    if service_id:
        row = store.get_service(service_id)
        if not row or row.get("service_type") != service_type:
            return None
        if not row.get("enabled", True):
            return None
        return build_service_record(store, row)
    for row in store.list_services(service_type):
        if row.get("enabled", True):
            return build_service_record(store, row)
    return None
