"""Tests para translate_es_to_en — smoke tests con modelo stub."""

import os
import sys

sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "..", "..", ".."))

from python.functions.datascience.translate_es_to_en import translate_es_to_en


class _StubTokenizer:
    """Tokenizer stub que devuelve inputs triviales."""

    def __call__(self, text, return_tensors=None, max_length=512, truncation=True):
        # Devuelve un dict con una clave 'input_ids' que el modelo stub acepta.
        return {"input_ids": [[1, 2, 3]], "_text": text}

    def decode(self, token_ids, skip_special_tokens=True):
        # Devuelve siempre "translated" para testing.
        return "translated"


class _StubModel:
    """Modelo stub que devuelve tokens triviales."""

    def generate(self, input_ids=None, num_beams=4, max_length=512, **kwargs):
        return [[10, 11, 12]]


def test_texto_vacio_retorna_string_vacio():
    tok = _StubTokenizer()
    model = _StubModel()
    assert translate_es_to_en("", tok, model) == ""


def test_solo_espacios_retorna_string_vacio():
    tok = _StubTokenizer()
    model = _StubModel()
    assert translate_es_to_en("   ", tok, model) == ""


def test_una_frase_en_espanol_produce_output_no_vacio():
    tok = _StubTokenizer()
    model = _StubModel()
    result = translate_es_to_en("Pablo Isla es presidente de Inditex.", tok, model)
    assert isinstance(result, str)
    assert len(result) > 0


def test_multiples_frases_se_unen_con_espacio():
    tok = _StubTokenizer()
    model = _StubModel()
    # El stub siempre devuelve "translated" por frase
    result = translate_es_to_en(
        "Primera frase. Segunda frase. Tercera frase.",
        tok,
        model,
    )
    # Con el stub, cada frase produce "translated", unidas con espacio
    parts = result.split(" ")
    assert all(p == "translated" for p in parts)
    assert len(parts) >= 1
