"""score_demand_signal — puntua una pieza de texto por senales de demanda de mercado.

Funcion pura: sin I/O, determinista. Detecta frases que indican que alguien
busca, desea o pagaria por una herramienta/solucion (demanda latente).
"""

DEFAULT_PHRASES = [
    "i wish there was",
    "is there a tool",
    "looking for a tool",
    "looking for an",
    "alternative to",
    "anyone know a tool",
    "does anyone know",
    "how do i automate",
    "willing to pay",
    "would pay for",
    "frustrated with",
    "need a way to",
    "wish there was a way",
    "is there any app",
    "recommend a tool",
]


def score_demand_signal(text: str, phrases: list[str] = None) -> dict:
    """Puntua un texto contando frases que senalan demanda de mercado.

    Match case-insensitive por substring. Cada frase que aparece en `text`
    suma 1 al score y se anade (en minusculas) a la lista de coincidencias.

    Args:
        text: Texto a analizar (titulo + cuerpo de un post, comentario, etc.).
        phrases: Lista de frases-senal a buscar. Si es None, usa el catalogo
                 por defecto orientado a demanda de herramientas/SaaS.

    Returns:
        Dict con:
        - demand_score (int): numero de frases distintas que matchearon.
        - matched_phrases (list[str]): las frases que coincidieron, en minusculas.
    """
    if phrases is None:
        phrases = DEFAULT_PHRASES

    text_lower = (text or "").lower()

    matched = []
    for phrase in phrases:
        phrase_lower = phrase.lower()
        if phrase_lower in text_lower:
            matched.append(phrase_lower)

    return {
        "demand_score": len(matched),
        "matched_phrases": matched,
    }
