#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import os
import sys
import sqlite3
import subprocess
import shutil


def get_adname(adid, db_path):
    """
    从数据库获取adname
    """
    conn = sqlite3.connect(db_path)
    cursor = conn.cursor()
    
    cursor.execute("SELECT DISTINCT adname FROM srts WHERE adid = ? LIMIT 1", (adid,))
    result = cursor.fetchone()
    conn.close()
    
    if result:
        return result[0]
    return f"adid_{adid}"


def get_subtitle_count(adid, db_path):
    """
    获取字幕数量
    """
    conn = sqlite3.connect(db_path)
    cursor = conn.cursor()
    
    cursor.execute("SELECT COUNT(*) FROM srts WHERE adid = ?", (adid,))
    count = cursor.fetchone()[0]
    conn.close()
    
    return count


def get_audio_files(audio_dir, pattern):
    """
    获取音频文件列表
    """
    files = []
    for file in os.listdir(audio_dir):
        if file.endswith('.mp3'):
            # 提取索引
            if pattern == 'cn':
                # 中文音频文件名格式：seg000-v-0-3020-3120-3120-200-v.mp3
                idx_str = file.split('-')[0].replace('seg', '')
            elif pattern == 'en':
                # 英文TTS文件名格式：tts_000.mp3
                idx_str = file.replace('tts_', '').replace('.mp3', '')
            
            try:
                idx = int(idx_str)
                files.append((idx, os.path.join(audio_dir, file)))
            except ValueError:
                pass
    
    # 按索引排序
    files.sort(key=lambda x: x[0])
    return files


def combine_audio_pairs(adid):
    """
    拼接音频对
    """
    # 配置
    db_path = r'\\ll\D\xtrssvjj\db\dpd.db'
    
    # 获取adname
    adname = get_adname(adid, db_path)
    print(f"adname: {adname}")
    
    # 音频目录
    cn_dir = f"{adname}_audio"
    en_dir = f"{adname}_tts"
    output_dir = f"{adname}_combined"
    
    # 检查目录是否存在
    if not os.path.exists(cn_dir):
        print(f"错误：中文音频目录不存在: {cn_dir}")
        return False
    
    if not os.path.exists(en_dir):
        print(f"错误：英文TTS目录不存在: {en_dir}")
        return False
    
    # 清理输出目录
    if os.path.exists(output_dir):
        shutil.rmtree(output_dir)
    os.makedirs(output_dir)
    
    # 获取音频文件
    cn_files = get_audio_files(cn_dir, 'cn')
    en_files = get_audio_files(en_dir, 'en')
    
    print(f"找到 {len(cn_files)} 个中文音频文件")
    print(f"找到 {len(en_files)} 个英文TTS文件")
    
    if len(cn_files) != len(en_files):
        print("错误：中文音频和英文TTS文件数量不匹配")
        return False
    
    # 拼接音频对
    for i, (cn_idx, cn_path) in enumerate(cn_files):
        # 找到对应的英文文件
        en_file = None
        for en_idx, en_path in en_files:
            if en_idx == cn_idx:
                en_file = en_path
                break
        
        if not en_file:
            print(f"警告：未找到索引为 {cn_idx} 的英文TTS文件")
            continue
        
        # 输出文件名
        output_file = os.path.join(output_dir, f"cn+en{cn_idx:03d}.mp3")
        
        # 创建临时文件列表
        with open('temp_list.txt', 'w', encoding='utf-8') as f:
            f.write(f"file '{cn_path}'\n")
            f.write(f"file '{en_file}'\n")
        
        # 执行拼接
        cmd = [
            "ffmpeg", "-y",
            "-f", "concat",
            "-safe", "0",
            "-i", "temp_list.txt",
            "-acodec", "libmp3lame",
            "-ar", "44100",
            "-ac", "2",
            output_file
        ]
        
        subprocess.run(cmd, capture_output=True)
        
        # 显示进度
        if (i + 1) % 10 == 0:
            print(f"拼接音频 {i+1}/{len(cn_files)}")
    
    # 清理临时文件
    if os.path.exists('temp_list.txt'):
        os.remove('temp_list.txt')
    
    print(f"完成！拼接了 {len(cn_files)} 对音频")
    print(f"输出目录: {output_dir}")
    return True


def main():
    """
    主函数
    """
    if len(sys.argv) != 2:
        print("用法: python combine_audio.py <adid>")
        print("示例: python combine_audio.py 8442")
        sys.exit(1)
    
    try:
        adid = int(sys.argv[1])
    except ValueError:
        print("错误：adid必须是数字")
        sys.exit(1)
    
    print(f"=== 音频拼接工具 ===")
    print(f"adid: {adid}")
    
    success = combine_audio_pairs(adid)
    
    if success:
        print("\n音频拼接完成！")
    else:
        print("\n音频拼接失败！")
        sys.exit(1)


if __name__ == "__main__":
    main()