#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
生成"韩寒创业简史 中"的TTS
"""

import os
import sqlite3
import edge_tts
import asyncio


def get_srts_data(adid):
    """
    获取srts数据
    """
    db_path = r"\\ll\D\xtrssvjj\db\dpd.db"
    try:
        conn = sqlite3.connect(db_path)
        cur = conn.cursor()
        
        # 查询srts数据，按idx排序
        cur.execute("SELECT idx, en FROM srts WHERE adid=? ORDER BY idx", (adid,))
        srtsdata = cur.fetchall()
        conn.close()
        
        print(f"找到 {len(srtsdata)} 条字幕数据")
        return srtsdata
    except Exception as e:
        print(f"获取srts数据错误: {e}")
        return []


async def generate_tts(text, output_path):
    """
    生成TTS音频
    """
    try:
        communicate = edge_tts.Communicate(text, "en-US-AriaNeural", rate="-30%")
        await communicate.save(output_path)
        return True
    except Exception as e:
        print(f"  TTS生成错误: {e}")
        return False


async def generate_all_tts(adid, output_dir):
    """
    生成所有TTS音频
    """
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
        print(f"创建输出目录: {output_dir}")
    
    # 获取字幕数据
    srtsdata = get_srts_data(adid)
    if not srtsdata:
        print("错误: 未找到字幕数据")
        return
    
    # 生成每个TTS音频
    for idx, en in srtsdata:
        output_path = os.path.join(output_dir, f"tts_{idx:03d}.mp3")
        
        # 如果TTS已存在，跳过
        if os.path.exists(output_path):
            print(f"TTS音频 {idx:03d} 已存在，跳过...")
            continue
        
        # 生成TTS音频
        print(f"正在生成TTS音频 {idx:03d}...")
        if await generate_tts(en, output_path):
            print(f"  成功: {output_path}")
        else:
            print(f"  失败: tts_{idx:03d}.mp3")
    
    print(f"\n完成！TTS音频保存到: {output_dir}")


if __name__ == "__main__":
    adid = 8417
    output_dir = "韩寒创业简史_中集_tts"
    
    print("开始生成TTS音频")
    print(f"adid: {adid}")
    print(f"输出目录: {output_dir}")
    
    asyncio.run(generate_all_tts(adid, output_dir))
