import os
import requests
import time
from mutagen.mp3 import MP3  # 🔥 引入专业的 MP3 物理时长硬算库

# ================= ⚡ 全左手高频配置区 =================
AUDIO_FILE = "srtsegjoin\\LV赢了官司、输了人缘：一场法律完胜背后的市场宿命与未来博弈_2026年苏州中院1030万元的天价侵权判决，让LV再次在中国知识产权诉讼中拿下彻底的法律胜利。证据确凿、法条支撑、判决严谨，LV在法理层面毫无瑕疵，稳稳守住了自身驰名商标的专属权益。但这场看似完美的胜诉，却引发了全网舆论的剧烈反噬：网友集体质疑其“挪用中国古纹、反向收割本土品牌”，大众好感度断崖下滑，抵制声音持续发酵，品牌多年积累_bilingual.mp3"
AUDIO_FILE = "srtsegjoin\\你们可能还没意识到，王虹证明的这个三维挂谷猜想，对人类文明未来的发展影响有多大...#菲尔兹奖#王虹#挂谷猜想_bilingual.mp3"
CLOUD_URL = "http://more.devv.cc:5550"
AUTH_TOKEN = "your_left_hand_password"
# =======================================================

def get_audio_duration(file_path):
    """真正通过读取 MP3 二进制帧，物理硬算出精准到秒的播放时长（格式如 15:20）"""
    try:
        audio = MP3(file_path)
        total_seconds = int(audio.info.length)  # 自动算出总秒数
        
        minutes = total_seconds // 60
        seconds = total_seconds % 60
        
        # 自动格式化补零，确保计算出来的结果完全对齐小宇宙的 15:20 或 05:08 规范
        return f"{minutes:02d}:{seconds:02d}"
    except Exception as e:
        print(f"⚠️ 时长硬算发生意外，使用默认兜底：10:00。错误原因: {e}")
        return "10:00"

def generate_and_send(cat=1):
    if not os.path.exists(AUDIO_FILE):
        print(f"❌ 错误：在你家里的硬盘上找不到该文件：{AUDIO_FILE}")
        return

    # 1. 自动提取带标签的完整长文件名
    raw_filename = os.path.basename(AUDIO_FILE)

    # 2. 自动清洗标题：去掉尾部重复的 _bilingual.mp3 后缀
    clean_title = raw_filename
    for suffix in ["_bilingual.mp3", ".mp3", "_bilingual"]:
        if clean_title.endswith(suffix):
            clean_title = clean_title[:-len(suffix)]
            break

    # 3. 自动日期包装：自动获取当前系统月-日（例如 7-23），拼装成 7-23 (标题) 格式
    current_date = time.strftime("%m-%d").lstrip("0").replace("-0", "-")
    final_title = f"{current_date} {clean_title}"
    desc=clean_title

    # 4. 自动计算文件物理字节体积
    file_size = os.path.getsize(AUDIO_FILE)

    # 5. 🔥 核心绝杀：直接读取 MP3，在内存中真正硬算出音频物理播放时长！
    calculated_duration = get_audio_duration(AUDIO_FILE)

    # 6. 构建全自动打包的结构化单集 payload 字典（时长已实现 100% 自动硬算）
    payload = {
        'cat':cat,
        "title": final_title,
        "description": desc,
        "pubDate": time.strftime("%a, %d %b %Y %H:%M:%S +0800", time.localtime()),
        "guid": f"sdmore-{int(time.time())}",
        "filename": raw_filename,
        "length": file_size,
        "duration": calculated_duration  # ⚡ 真正物理生成的真实时长
    }

    headers = {"X-Podcast-Token": AUTH_TOKEN}
    
    print(f"🚀 正在全自动解析并向云端发射...")
    print(f"📊 提取标题：{final_title}")
    print(f"⏱️ 硬算时长：{calculated_duration}（字节数: {file_size}）")
    
    try:
        response = requests.post(CLOUD_URL, json=payload, headers=headers, timeout=10)
        if response.status_code == 200:
            print("\n🎉 发布大捷！")
            print("▶️ 节目数据已被云端 Python 自动编辑编码并安全写入 feed.xml。")
            print("▶️ 小宇宙已通过 443 端口同步更新，听众点击播放将瞬间 302 飞回你家 8333 根目录出声！")
        else:
            print(f"\n❌ 发射失败，云服务器拒绝了你的请求。状态码：{response.status_code}")
    except Exception as e:
        print(f"\n❌ 网络连接失败，请检查云端 5550 端口及 Nginx 状态。错误信息: {e}")

if __name__ == "__main__":
    generate_and_send()
