import os
import sys
from pathlib import Path
from openai import OpenAI

# 1. 检查环境变量
api_key = os.environ.get("AI_BUILDER_TOKEN")
if not api_key:
    print("错误: 未找到环境变量 AI_BUILDER_TOKEN，请先设置！")
    sys.exit(1)

# 2. 配置路径与客户端
# AI Builder Space 默认兼容 OpenAI 规范的 Base URL
BASE_URL = os.environ.get(
    "AI_BUILDER_BASE_URL", "https://api.ai-builder.space/v1"
)
MEMOS_DIR = Path("memos")
TRANSCRIPTS_DIR = Path("transcripts")

# 支持的常见音频格式（iOS 语音备忘录通常为 .m4a）
SUPPORTED_EXTENSIONS = {
    ".m4a",
    ".mp3",
    ".wav",
    ".aac",
    ".ogg",
    ".flac",
    ".webm",
}

client = OpenAI(
    api_key=api_key,
    base_url=BASE_URL,
)


def transcribe():
    # 检查输入文件夹
    if not MEMOS_DIR.exists() or not MEMOS_DIR.is_dir():
        print(f"错误: 输入文件夹 '{MEMOS_DIR}' 不存在。")
        return

    # 自动创建输出文件夹
    TRANSCRIPTS_DIR.mkdir(parents=True, exist_ok=True)

    # 获取所有音频文件
    audio_files = [
        f
        for f in MEMOS_DIR.iterdir()
        if f.is_file() and f.suffix.lower() in SUPPORTED_EXTENSIONS
    ]

    if not audio_files:
        print(f"'{MEMOS_DIR}' 目录下没有找到支持的音频文件。")
        return

    print(f"找到 {len(audio_files)} 个音频文件，开始处理...\n")

    for index, file_path in enumerate(audio_files, 1):
        target_txt = TRANSCRIPTS_DIR / f"{file_path.stem}.txt"

        # 如果已经转录过，则跳过（避免重复扣费）
        if target_txt.exists():
            print(
                f"[{index}/{len(audio_files)}] [跳过] {file_path.name} (对应 .txt 已存在)"
            )
            continue

        print(
            f"[{index}/{len(audio_files)}] [正在转录] {file_path.name} ...",
            end="",
            flush=True,
        )

        try:
            with open(file_path, "rb") as audio_file:
                # 调用语音转文字接口
                response = client.audio.transcriptions.create(
                    model="whisper-1",  # 默认 Whisper 模型
                    file=audio_file,
                )

            # 写入对应的 txt 文件
            target_txt.write_text(response.text, encoding="utf-8")
            print(" -> 完成")

        except Exception as e:
            print(f" -> 失败！错误信息: {e}")

    print("\n所有任务处理完毕！输出结果保存在 transcripts/ 文件夹中。")


if __name__ == "__main__":
    transcribe()
