"""Dry-run a private YouTube upload package; no API writes."""

from __future__ import annotations

import argparse
from typing import Sequence, TextIO
import sys

from autoshorts.youtube.upload_only import YouTubePrivateUploadPackage, package_path_for, validate_private_upload_gate, warn_if_youtube_api_key_present


def main(argv: Sequence[str] | None = None, *, stdout: TextIO | None = None) -> int:
    parser = argparse.ArgumentParser(description="Dry-run private YouTube upload package; no API writes.")
    parser.add_argument("candidate_id")
    parser.add_argument("--version")
    args = parser.parse_args(argv)
    out = stdout or sys.stdout
    warning = warn_if_youtube_api_key_present()
    if warning:
        print(warning, file=out)
    path = package_path_for(args.candidate_id, args.version)
    if not path.exists():
        print(f"Package not found: {path}", file=out)
        return 2
    package = YouTubePrivateUploadPackage.from_json(path.read_text(encoding="utf-8"))
    gate = validate_private_upload_gate(package, package.approval_command)
    print(f"Video file: {package.video_path}", file=out)
    print(f"Video SHA256: {package.video_sha256}", file=out)
    print(f"Thumbnail file: {package.thumbnail_path}", file=out)
    print(f"Thumbnail SHA256: {package.thumbnail_sha256}", file=out)
    print(f"Title: {package.title}", file=out)
    print("Description:", file=out)
    print(package.description, file=out)
    print(f"Tags: {', '.join(package.tags)}", file=out)
    print(f"Category ID: {package.categoryId}", file=out)
    print(f"privacyStatus={package.privacyStatus}", file=out)
    print(f"containsSyntheticMedia={package.containsSyntheticMedia}", file=out)
    print(f"selfDeclaredMadeForKids={package.selfDeclaredMadeForKids}", file=out)
    print(f"Gate Result: {'valid' if gate.is_valid else 'blocked'}", file=out)
    if gate.errors:
        print("Errors:", file=out)
        for err in gate.errors:
            print(f"- {err}", file=out)
    print("No external API write action performed.", file=out)
    return 0 if gate.is_valid else 3


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