# services/media.py
import subprocess
from typing import Optional

from media_tokens import make_media_token


def safe_filename(name: str) -> str:
    name = (name or "").replace("\\", "_").replace("/", "_")
    return name[:200] if name else "upload.mp4"


def video_duration_seconds_ffprobe(path: str) -> float:
    """
    Best-effort duration check using ffprobe. If ffprobe isn't installed,
    returns -1 and duration checks are skipped.
    """
    try:
        cmd = [
            "ffprobe",
            "-v",
            "error",
            "-show_entries",
            "format=duration",
            "-of",
            "default=noprint_wrappers=1:nokey=1",
            path,
        ]
        out = subprocess.check_output(cmd, stderr=subprocess.STDOUT).decode("utf-8").strip()
        return float(out)
    except Exception:
        return -1.0


def build_public_media_url(
    *,
    stored_filename: str,
    public_base_url: str,
    signing_secret: str,
    ttl_seconds: int,
) -> str:
    """
    Create a signed URL that TikTok can pull from.
    stored_filename must be a filename inside UPLOAD_DIR.
    """
    token = make_media_token(
        filename=stored_filename,
        secret=signing_secret,
        ttl_seconds=ttl_seconds,
    )
    return f"{public_base_url.rstrip('/')}/media/{token}"
