from abc import ABC, abstractmethod

class BaseAudioService(ABC):

    def __init__(self, api_key, api_secret):
        self.api_key = api_key
        self.api_secret = api_secret

    @abstractmethod
    def get_token(self):
        pass

    @abstractmethod
    def synthesize_speech(self, text, language='en'):
        pass

    @abstractmethod
    def synthesize_speech_raw(self, text, language='en'):
        """
        Generate speech from text and return the raw audio data directly
        without storing it or creating a URL
        
        Args:
            text (str): The text to convert to speech
            language (str, optional): Language code. Defaults to 'en'.
            
        Returns:
            bytes: Raw audio data
        """
        pass

    @abstractmethod
    def recognize_speech(self, audio_data, language='en') -> str:
        pass
