"""
TTS 流式合成测试
"""

from pathlib import Path
from src.Module.tts.tts import StreamingTTS, synthesize, AudioChunk


def test_stream_synthesis():
    """测试流式合成 - 使用 yield 生成器"""
    print("=" * 50)
    print("流式语音合成测试")
    print("=" * 50)

    # 创建 TTS 实例
    tts = StreamingTTS(
        voice='Cherry',
        language='Chinese',
        speech_rate=1.0,
    )

    text = "你好，我是通义千问语音合成系统。这是一段流式合成测试。"
    print(f"合成文本: {text}\n")

    # 流式接收音频
    total_bytes = 0
    chunk_count = 0
    audio_data = bytearray()

    print("开始流式接收音频...")
    for chunk in tts.stream(text):
        if chunk.error:
            print(f"  错误: {chunk.error}")
            break

        if chunk.data:
            chunk_count += 1
            total_bytes += len(chunk.data)
            audio_data.extend(chunk.data)
            print(
                f"  [Chunk {chunk_count:02d}] 收到 {len(chunk.data):5d} 字节 | 累计: {total_bytes:6d} 字节")

        if chunk.is_final:
            print("\n流式传输完成!")
            break

    # 保存为 WAV 文件
    output_dir = Path(__file__).parent / 'output'
    output_dir.mkdir(exist_ok=True)
    wav_file = output_dir / 'stream_test.wav'

    import wave
    with wave.open(str(wav_file), 'wb') as wav:
        wav.setnchannels(1)
        wav.setsampwidth(2)
        wav.setframerate(24000)
        wav.writeframes(audio_data)

    print(f"\n总计: {chunk_count} 个数据块, {total_bytes} 字节")
    print(f"音频已保存: {wav_file}")

    return chunk_count > 0


def test_convenient_function():
    """测试便捷函数"""
    print("\n" + "=" * 50)
    print("便捷函数测试")
    print("=" * 50)

    text = "这是使用便捷函数合成的语音。"
    print(f"合成文本: {text}\n")

    total_bytes = 0
    for chunk in synthesize(text, voice='Cherry'):
        if chunk.data:
            total_bytes += len(chunk.data)
        if chunk.is_final:
            break

    print(f"合成完成，总数据量: {total_bytes} 字节")
    return total_bytes > 0


if __name__ == '__main__':
    print("=" * 60)
    print("     TTS 流式合成测试")
    print("=" * 60)

    success1 = test_stream_synthesis()
    success2 = test_convenient_function()

    print("\n" + "=" * 60)
    print("测试结果:")
    print(f"  流式合成: {'✓ 通过' if success1 else '✗ 失败'}")
    print(f"  便捷函数: {'✓ 通过' if success2 else '✗ 失败'}")
