#!/usr/bin/env python3
"""
快速音频设置脚本
为游戏创建音频文件 - 组合了下载和占位文件创建
"""

import os
import requests
import time
from pathlib import Path

TARGET_DIR = "app/src/main/res/raw"

# 可靠的免费音频下载链接
RELIABLE_DOWNLOADS = {
    # 从 opengameart.org 和其他可靠的免费资源
    "button_click.mp3": "https://opengameart.org/sites/default/files/button-09.wav",
    "notification_beep.mp3": "https://opengameart.org/sites/default/files/notification.wav", 
    "error_alert.mp3": "https://opengameart.org/sites/default/files/error.wav",
    "discovery_chime.mp3": "https://opengameart.org/sites/default/files/pickup.wav",
}

# 无法下载的文件将创建占位符
ALL_AUDIO_FILES = [
    ("ambient_mystery.mp3", "神秘氛围音乐 - 适合探索场景"),
    ("electronic_tension.mp3", "电子紧张音乐 - 适合危险场景"),
    ("orchestral_revelation.mp3", "管弦乐启示 - 适合重大发现"),
    ("epic_finale.mp3", "史诗终章 - 适合游戏结局"),
    ("ventilation_soft.mp3", "轻柔通风音效 - 基地背景音"),
    ("heart_monitor.mp3", "心率监控音效 - 医疗舱音效"),
    ("reactor_hum.mp3", "反应堆嗡鸣 - 工业区背景音"),
    ("space_silence.mp3", "太空寂静 - 外太空氛围"),
    ("wind_gentle.mp3", "微风音效 - 晴朗天气"),
    ("rain_light.mp3", "小雨音效 - 下雨天气"),
    ("storm_cyber.mp3", "电子风暴 - 特殊天气"),
    ("solar_storm.mp3", "太阳风暴 - 极端天气"),
    ("button_click.mp3", "按钮点击音效 - UI反馈"),
    ("notification_beep.mp3", "通知提示音 - 系统通知"),
    ("error_alert.mp3", "错误警报音 - 错误提示"),
    ("discovery_chime.mp3", "发现音效 - 物品发现"),
    ("time_distortion.mp3", "时间扭曲音效 - 特殊事件"),
    ("oxygen_leak_alert.mp3", "氧气泄漏警报 - 紧急情况"),
]

def create_directories():
    """创建必要的目录"""
    Path(TARGET_DIR).mkdir(parents=True, exist_ok=True)
    print(f"📁 目录已准备: {TARGET_DIR}")

def try_download(url, filename):
    """尝试下载文件"""
    file_path = Path(TARGET_DIR) / filename
    
    if file_path.exists():
        print(f"✅ 已存在: {filename}")
        return True
    
    print(f"⬇️  尝试下载: {filename}")
    
    try:
        headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36'}
        response = requests.get(url, headers=headers, timeout=10, stream=True)
        
        if response.status_code == 200:
            with open(file_path, 'wb') as f:
                for chunk in response.iter_content(chunk_size=8192):
                    if chunk:
                        f.write(chunk)
            print(f"✅ 下载成功: {filename}")
            return True
        else:
            print(f"❌ 下载失败: {filename} (HTTP {response.status_code})")
            return False
            
    except Exception as e:
        print(f"❌ 下载错误: {filename} - {e}")
        return False

def create_audio_placeholder(filename, description):
    """创建音频占位文件"""
    file_path = Path(TARGET_DIR) / filename
    
    if file_path.exists():
        return
    
    # 创建一个简单的文本占位文件
    placeholder_content = f"""AUDIO PLACEHOLDER FILE
音频占位文件

文件名: {filename}
描述: {description}

这是一个占位文件，用于测试音频系统架构。
要获得完整的游戏体验，请下载真实的音频文件。

推荐下载网站:
1. https://pixabay.com/sound-effects/ (免费，无需注册)
2. https://freesound.org/ (免费，需注册)
3. https://opengameart.org/ (开源游戏音频)

下载后，请将文件重命名为: {filename}
并放置在目录: {TARGET_DIR}/

提示: 运行 ./audio_rename.sh 可以自动重命名下载的文件
"""
    
    try:
        with open(file_path, 'w', encoding='utf-8') as f:
            f.write(placeholder_content)
        print(f"📄 占位符已创建: {filename}")
    except Exception as e:
        print(f"❌ 创建占位符失败: {filename} - {e}")

def create_download_instructions():
    """创建下载说明文件"""
    instructions_file = Path(TARGET_DIR) / "README_AUDIO.txt"
    
    instructions = """音频文件下载说明
=================

本目录包含游戏所需的 18 个音频文件。

当前状态:
- ✅ 部分文件可能已通过脚本自动下载
- 📄 其他文件为占位符，需要手动下载替换

手动下载步骤:
1. 访问 https://pixabay.com/sound-effects/
2. 搜索对应的音效类型 (例如: "button click", "ambient space")
3. 下载 MP3 格式的音频文件
4. 重命名为对应的文件名 (如 button_click.mp3)
5. 替换本目录中的占位符文件

自动化工具:
- 运行 ../../../audio_rename.sh 自动重命名下载的文件
- 查看 ../../../AUDIO_DOWNLOAD_GUIDE.md 获取详细下载指南

测试音频系统:
即使使用占位文件，游戏的音频系统也能正常运行，
这样你就可以先测试功能，稍后再添加真实音频。

编译游戏:
cd ../../../
./gradlew assembleDebug

下载完成后，游戏将拥有完整的音频体验！
"""
    
    try:
        with open(instructions_file, 'w', encoding='utf-8') as f:
            f.write(instructions)
        print(f"📖 说明文件已创建: {instructions_file.name}")
    except Exception as e:
        print(f"❌ 创建说明文件失败: {e}")

def main():
    """主函数"""
    print("🎵 快速音频设置工具")
    print("=" * 40)
    print("🎯 目标: 为游戏设置完整的音频文件集")
    print("💡 策略: 下载 + 占位符 = 立即可测试")
    print()
    
    # 创建目录
    create_directories()
    
    # 尝试下载可靠的文件
    print("⬇️  尝试下载可用的音频文件...")
    download_count = 0
    for filename, url in RELIABLE_DOWNLOADS.items():
        if try_download(url, filename):
            download_count += 1
        time.sleep(1)  # 避免请求过频
    
    print(f"\n📊 下载统计: {download_count}/{len(RELIABLE_DOWNLOADS)} 个文件成功下载")
    
    # 为所有文件创建占位符（如果不存在）
    print(f"\n📄 创建完整的音频文件集 ({len(ALL_AUDIO_FILES)} 个文件)...")
    for filename, description in ALL_AUDIO_FILES:
        create_audio_placeholder(filename, description)
    
    # 创建说明文件
    create_download_instructions()
    
    # 检查结果
    audio_files = list(Path(TARGET_DIR).glob("*"))
    print(f"\n📂 音频目录文件总数: {len(audio_files)}")
    
    # 最终说明
    print("\n🎉 音频设置完成！")
    print("\n✅ 你现在可以:")
    print("   1. 立即编译并测试: ./gradlew assembleDebug")
    print("   2. 音频系统界面将正常显示")
    print("   3. 所有音频功能都可以测试")
    
    print("\n🎵 要获得完整音频体验:")
    print("   1. 访问 https://pixabay.com/sound-effects/")
    print("   2. 下载对应类型的音频文件")
    print("   3. 使用 ./audio_rename.sh 自动重命名")
    print("   4. 或查看 AUDIO_DOWNLOAD_GUIDE.md 详细指南")
    
    if download_count > 0:
        print(f"\n🎊 已有 {download_count} 个真实音频文件!")
    
    print(f"\n📁 音频文件位置: {TARGET_DIR}/")
    print("🔧 占位符确保系统正常运行，真实音频提升体验")

if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        print("\n⏹️  设置中断")
    except Exception as e:
        print(f"\n💥 设置错误: {e}")
        print("请检查目录权限和网络连接")
