import os
from pathlib import Path
import gtts
import tempfile

try:
    from pydub import AudioSegment
    from pydub.effects import speedup
except ImportError:
    AudioSegment = None
    speedup = None

class HindiTTS:
    def __init__(self, output_dir="tts_output"):
        self.output_dir = Path(output_dir)
        self.output_dir.mkdir(exist_ok=True)

    def change_audio_speed(self, audio, speed=1.2):
        if speed == 1.0:
            return audio
        elif speed > 1.0 and speedup:
            return speedup(audio, playback_speed=speed)
        else:
            new_frame_rate = int(audio.frame_rate * speed)
            slowed_audio = audio._spawn(audio.raw_data, overrides={"frame_rate": new_frame_rate})
            return slowed_audio.set_frame_rate(audio.frame_rate)

    def convert_text_to_speech(self, text, output_filename="hindi_speech.wav", speed=1.2):
        output_path = self.output_dir / output_filename
        try:
            tts = gtts.gTTS(text=text, lang='hi', slow=False)
            temp_mp3 = tempfile.NamedTemporaryFile(suffix=".mp3", delete=False)
            tts.save(temp_mp3.name)

            if AudioSegment:
                audio = AudioSegment.from_mp3(temp_mp3.name)
                adjusted_audio = self.change_audio_speed(audio, speed)
                adjusted_audio.export(output_path, format="wav")
            else:
                mp3_fallback_path = output_path.with_suffix(".mp3")
                os.rename(temp_mp3.name, mp3_fallback_path)
                return str(mp3_fallback_path)

            os.unlink(temp_mp3.name)
            return str(output_path)

        except Exception as e:
            print(f"Error in TTS conversion: {e}")
            return None

if __name__ == "__main__":
    # Hardcoded Hindi text for testing
    test_text = (
        "नमस्ते! यह एक परीक्षण वाक्य है जो हिंदी टेक्स्ट को स्पीच में बदलने के लिए उपयोग किया जा रहा है।"
    )
    tts = HindiTTS()

    # Test with 1.2x speed
    output_file = tts.convert_text_to_speech(test_text, "test_output.wav", speed=1.2)

    if output_file:
        print(f"✅ Audio file created: {output_file}")
    else:
        print("❌ Failed to create audio file")
