from deep_translator import GoogleTranslator
import asyncio
from typing import List, Dict, Union

class TranslationService:
    def __init__(self):
        self.cache: Dict[str, Dict[str, str]] = {}

    async def translate(self, text: str, target_lang: str = 'es') -> str:
        if target_lang not in self.cache:
            self.cache[target_lang] = {}

        if text in self.cache[target_lang]:
            return self.cache[target_lang][text]

        loop = asyncio.get_running_loop()
        translated = await loop.run_in_executor(
            None,
            lambda: GoogleTranslator(source='auto', target=target_lang).translate(text)
        )
        self.cache[target_lang][text] = translated
        return translated

    async def translate_list(self, text_list: List[str], target_lang: str = 'es') -> List[str]:
        if target_lang not in self.cache:
            self.cache[target_lang] = {}

        translated_list = []
        for text in text_list:
            if text in self.cache[target_lang]:
                translated = self.cache[target_lang][text]
            else:
                # Run synchronous GoogleTranslator in an executor
                loop = asyncio.get_running_loop()
                translated = await loop.run_in_executor(
                    None,
                    lambda: GoogleTranslator(source='auto', target=target_lang).translate(text)
                )
                self.cache[target_lang][text] = translated
            translated_list.append(translated)

        return translated_list