import subprocess
from tts import TTS
import logging
import sys

logging.basicConfig()
logger = logging.getLogger("jarvis")


class Pico2wave(TTS):
    PICO2WAVE_LANGUAGES = dict(fr="fr-FR", us="en-US", uk="en-GB", de="de-DE", es="es-ES", it="it-IT")
    PICO2WAVE_LANGUAGES_DEFAULT = 'fr'

    def __init__(self, audio_player_type=None):
        """

        :param audio_player_type: MP3 or WAV
        """
        TTS.__init__(self, audio_player_type, "wav")

    def say(self, words=None, language=PICO2WAVE_LANGUAGES_DEFAULT, cache=False):
        language = self.get_voice(language)
        file_path = self.cache.get_audio_file_cache_path(words, language=language, voice="default")

        self.get_audio(words, language, file_path)
        self.play_audio(file_path, cache=cache)

    def get_voice(self, language):
        logger.debug("Pico2wave asked lang: %s" % language)

        if language in self.PICO2WAVE_LANGUAGES:
            return self.PICO2WAVE_LANGUAGES[language]

        logger.debug("Cannot find language matching language:  %s replace by default voice: %s", language, self.PICO2WAVE_LANGUAGES_DEFAULT)
        return self.PICO2WAVE_LANGUAGES_DEFAULT

    @staticmethod
    def get_audio(words, language, file_path):
        subprocess.check_output(["/usr/bin/pico2wave", "-l=%s" % language, "-w=%s" % file_path, words], stderr=sys.stderr)