"""Simple language detection based on common words in video descriptions/titles."""

# Common Portuguese words
PT_WORDS = {
    "de", "do", "da", "dos", "das", "que", "em", "um", "uma", "para", "com",
    "nao", "não", "por", "mais", "como", "mas", "foi", "isso", "esse", "essa",
    "seu", "sua", "ele", "ela", "nos", "voce", "você", "tem", "ter", "ser",
    "muito", "tambem", "também", "aqui", "meu", "minha", "quando", "todos",
    "essa", "este", "esta", "já", "ja", "até", "ate", "ainda", "depois",
    "gente", "pra", "pro", "vc", "tb", "tudo", "agora", "fazer", "porque",
    "olha", "vem", "vou", "fiz", "ficou", "assim", "melhor", "receita",
    "dica", "simples", "facil", "fácil", "novo", "nova",
}

# Common English words
EN_WORDS = {
    "the", "and", "for", "are", "but", "not", "you", "all", "can", "her",
    "was", "one", "our", "out", "has", "his", "how", "its", "may", "new",
    "now", "old", "see", "way", "who", "did", "get", "let", "say", "she",
    "too", "use", "this", "that", "with", "have", "from", "they", "been",
    "said", "will", "each", "make", "like", "just", "over", "such", "take",
    "than", "them", "very", "when", "what", "your", "know", "about", "after",
    "would", "could", "should", "which", "their", "there", "where",
    "these", "those", "think", "watch", "follow", "check", "amazing",
}

# Common Spanish words
ES_WORDS = {
    "de", "la", "que", "el", "en", "los", "del", "las", "por", "con",
    "una", "son", "para", "como", "pero", "sus", "mas", "más", "fue",
    "esta", "este", "hay", "ese", "eso", "han", "sin", "muy", "todo",
    "ella", "ser", "hay", "tiene", "bien", "puede", "aqui", "aquí",
    "donde", "cuando", "hola", "mira", "esto", "tambien", "también",
    "nuevo", "nueva", "mejor", "hacer", "porque", "verdad", "nunca",
    "siempre", "ahora", "nada", "algo", "otro", "otra", "mismo",
    "antes", "despues", "después", "entre", "cada", "poco", "mucho",
}

# Words that are the same in PT/ES - need more context
PT_ONLY = {"voce", "você", "vc", "pra", "pro", "gente", "ficou", "fiz", "vou", "não", "nao", "tambem", "também", "até", "ate", "receita", "dica"}
ES_ONLY = {"hola", "mira", "verdad", "nunca", "siempre", "nada", "algo", "mismo", "poco", "mucho", "donde", "despues", "después"}


def detect_language(text: str) -> str:
    """Detect language from text. Returns 'pt', 'en', 'es', or '' if unknown."""
    if not text:
        return ""

    # Lowercase and split into words
    words = set(text.lower().split())
    # Also handle hashtags
    clean_words = set()
    for w in words:
        w = w.strip("#@.,!?;:'\"()[]{}").lower()
        if len(w) >= 2:
            clean_words.add(w)

    if not clean_words:
        return ""

    pt_score = len(clean_words & PT_WORDS) + len(clean_words & PT_ONLY) * 2
    en_score = len(clean_words & EN_WORDS)
    es_score = len(clean_words & ES_WORDS) + len(clean_words & ES_ONLY) * 2

    # Remove overlap between PT and ES (words like "de", "que", "para" etc.)
    # If both PT and ES score high, use PT_ONLY and ES_ONLY to disambiguate

    scores = {"pt": pt_score, "en": en_score, "es": es_score}
    max_score = max(scores.values())

    if max_score == 0:
        return ""

    # If there's a clear winner
    best = max(scores, key=scores.get)
    return best
