from __future__ import annotations

import re


def normalize_search_text(value: str) -> str:
    """Normalisiert Text fuer wortbasierte Suche.

    Gemeinsames Verhalten:
    - lower-case
    - Nicht-Alphanumerisches -> Leerzeichen
    - mehrfachen Whitespace kollabieren
    """

    value = (value or "").casefold()
    value = re.sub(r"[^a-z0-9]+", " ", value)
    value = re.sub(r"\s+", " ", value).strip()
    return value


def matches_query(query: str, *, title: str) -> bool:
    """True, wenn der normalisierte Titel den normalisierten Query als ganzes Token enthaelt."""

    normalized_query = normalize_search_text(query)
    if not normalized_query:
        return False
    haystack = f" {normalize_search_text(title)} "
    return f" {normalized_query} " in haystack

