import os
import edge_tts

class AssetGenerator:
    def __init__(self):
        # Explicit Castilian (es-ES) neural models
        self.voices = {
            "male": "es-ES-AlvaroNeural",
            "female": "es-ES-ElviraNeural"
        }

    async def generate_speech(self, text: str, output_path: str, gender: str = "male"):
        """
        Synthesizes Spanish text into an MP3 file using the selected Castilian voice gender.
        Default is set to male, but can be explicitly overwritten with 'female'.
        """
        # Fallback to male if an invalid string is passed
        voice_key = gender.lower() if gender.lower() in self.voices else "male"
        selected_voice = self.voices[voice_key]
        
        # Ensure target media folder exists locally
        os.makedirs(os.path.dirname(output_path), exist_ok=True)
        
        # Configure and execute the asynchronous stream
        communicate = edge_tts.Communicate(text, selected_voice)
        await communicate.save(output_path)
        
        return output_path