from __future__ import annotations

import os
import subprocess
import tempfile


VIDEO_EXTENSIONS = {".mp4", ".webm", ".mov", ".avi", ".mkv", ".m4v", ".ogv"}


def is_video_filename(filename: str = "", mime_type: str = "") -> bool:
    ext = os.path.splitext(filename or "")[1].lower()
    mime = (mime_type or "").strip().lower()
    return ext in VIDEO_EXTENSIONS or mime.startswith("video/")


def extract_audio_wav_bytes(input_path: str) -> bytes:
    if not input_path or not os.path.exists(input_path):
        raise FileNotFoundError("输入媒体文件不存在")

    fd, output_path = tempfile.mkstemp(suffix=".wav")
    os.close(fd)
    try:
        subprocess.run(
            [
                "ffmpeg",
                "-y",
                "-i",
                input_path,
                "-vn",
                "-acodec",
                "pcm_s16le",
                "-ar",
                "16000",
                "-ac",
                "1",
                output_path,
            ],
            check=True,
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE,
        )
        with open(output_path, "rb") as handle:
            return handle.read()
    finally:
        if os.path.exists(output_path):
            os.unlink(output_path)
