"""SLA Engine global search integration."""

from __future__ import annotations

from typing import TYPE_CHECKING

from simorgh.core.search import SearchableSpec, SearchHit, register_searchable

if TYPE_CHECKING:
    from simorgh.core.context import RequestContext


def _search_sla_policies(ctx: RequestContext, query: str, limit: int) -> list[SearchHit]:
    from django.db.models import Q

    from simorgh.apps.sla_engine.models import SLAPolicy

    if not ctx.tenant:
        return []

    qs = (
        SLAPolicy.objects.filter(tenant_id=ctx.tenant.pk)
        .filter(
            Q(name__icontains=query)
            | Q(description__icontains=query)
        )
        .distinct()
        .order_by("name")[:limit]
    )

    return [
        SearchHit(
            entity="sla_engine.policy",
            id=str(r.public_id),
            title=r.name,
            subtitle=r.get_sla_type_display(),
            url=f"/sla/policies/{r.public_id}/",
            score=2.0 if query.lower() in r.name.lower() else 1.0,
        )
        for r in qs
    ]


register_searchable(
    SearchableSpec(
        entity="sla_engine.policy",
        label_key="sla_engine.policy",
        search=_search_sla_policies,
    )
)
