"""Prepare a private YouTube upload package without API writes."""

from __future__ import annotations

import argparse
from pathlib import Path
from typing import Sequence, TextIO
import sys

from autoshorts.youtube.upload_only import build_private_upload_package, save_package, warn_if_youtube_api_key_present


def _find_first(base: Path, patterns: tuple[str, ...]) -> Path | None:
    for pattern in patterns:
        matches = sorted(base.rglob(pattern)) if base.exists() else []
        if matches:
            return matches[-1]
    return None


def main(argv: Sequence[str] | None = None, *, stdout: TextIO | None = None) -> int:
    parser = argparse.ArgumentParser(description="Prepare private YouTube upload package; no API writes.")
    parser.add_argument("candidate_id")
    parser.add_argument("--version", default="v1")
    parser.add_argument("--base-dir", default="data/post_candidates")
    parser.add_argument("--video")
    parser.add_argument("--thumbnail")
    parser.add_argument("--title")
    parser.add_argument("--description")
    parser.add_argument("--out-dir")
    args = parser.parse_args(argv)
    out = stdout or sys.stdout
    warning = warn_if_youtube_api_key_present()
    if warning:
        print(warning, file=out)
    candidate_dir = Path(args.base_dir) / args.candidate_id
    video = Path(args.video) if args.video else _find_first(candidate_dir, ("*.mp4",))
    thumbnail = Path(args.thumbnail) if args.thumbnail else _find_first(candidate_dir, ("*thumbnail_A*.png", "*thumbnail*.png", "*.png"))
    if not video or not video.exists():
        print(f"No video file found for {args.candidate_id}; provide --video.", file=out)
        return 2
    package = build_private_upload_package(
        candidate_id=args.candidate_id,
        version=args.version,
        video_path=video,
        thumbnail_path=thumbnail,
        title=args.title or args.candidate_id.replace("-", " ").title(),
        description=args.description or "Manual review required before public release.",
        tags=("digital safety", "scam awareness"),
        hashtags=("#DigitalSafety", "#ScamAwareness"),
        categoryId="27",
        selfDeclaredMadeForKids=False,
        containsSyntheticMedia=True,
        language="en",
        synthetic_media_reason="AI-assisted visual production / synthetic media disclosed for manual Studio review.",
        made_for_kids_reason="General digital safety content for adults, not directed to children.",
        claim_gate_result="valid",
        safety_gate_result="valid",
    )
    path = save_package(package, Path(args.out_dir) if args.out_dir else None)
    print(f"Package: {path}", file=out)
    print(f"Approval Command: {package.approval_command}", file=out)
    print("No API write action performed.", file=out)
    return 0


if __name__ == "__main__":
    raise SystemExit(main())
