"""Elimina palabras especificas de una lista de strings."""

from __future__ import annotations

import re
from typing import Iterable


def remove_words_from_column(
    values: Iterable[str | None],
    words: list[str],
) -> list[str]:
    """Elimina palabras de una lista de strings usando regex de palabra completa.

    Para cada string aplica un patron regex \\b(w1|w2|...)\\b case-insensitive,
    reemplaza por cadena vacia, colapsa espacios multiples y hace strip.
    None se convierte en cadena vacia.

    Args:
        values: Iterable de strings (o None) a limpiar.
        words: Lista de palabras a eliminar (case-insensitive).

    Returns:
        Lista de strings con las palabras eliminadas y espacios normalizados.
    """
    if not words:
        return [v if v is not None else "" for v in values]

    pattern = re.compile(
        r"\b(" + "|".join(re.escape(w) for w in words) + r")\b",
        flags=re.IGNORECASE,
    )

    result = []
    for value in values:
        if value is None:
            result.append("")
            continue
        cleaned = pattern.sub("", str(value))
        cleaned = re.sub(r"\s+", " ", cleaned).strip()
        result.append(cleaned)
    return result
