#!/usr/bin/env python3
"""Download an execution debug ZIP (Activity / watch export) by trace id."""

from __future__ import annotations

import argparse
import os
import sys

from stackgen import StackgenClient, StackgenConfig


def main() -> int:
    parser = argparse.ArgumentParser(
        description="POST …/executions/{traceId}/debug-export and write the ZIP.",
    )
    parser.add_argument("--base-url", default=os.environ.get("STACKGEN_URL", ""))
    parser.add_argument("--api-token", default=os.environ.get("STACKGEN_TOKEN", ""))
    parser.add_argument(
        "--workspace-id",
        "--org-id",
        default=os.environ.get("STACKGEN_WORKSPACE_ID") or os.environ.get("STACKGEN_PROJECT") or os.environ.get("STACKGEN_ORG_ID", ""),
    )
    parser.add_argument(
        "--trace-id",
        required=True,
        help="Execution trace id (from Ask start / subscribe / Activity)",
    )
    parser.add_argument(
        "--output-path",
        default="",
        help="Local ZIP path (default: execution-<trace>-debug.zip)",
    )
    args = parser.parse_args()
    if not args.base_url or not args.api_token or not args.workspace_id:
        parser.error("set STACKGEN_URL / STACKGEN_TOKEN / STACKGEN_WORKSPACE_ID (or flags)")

    out = (args.output_path or "").strip() or f"execution-{args.trace_id[:16]}-debug.zip"
    client = StackgenClient(
        StackgenConfig(
            base_url=args.base_url,
            api_token=args.api_token,
            workspace_id=args.workspace_id,
        )
    )
    path = client.aiden.download_execution_debug_zip(args.trace_id, out)
    print(f"trace_id={args.trace_id} output={path} bytes={path.stat().st_size}")
    return 0


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