#!/usr/bin/env python3
"""Webhook trigger → wait for session → download session artifact (CI-friendly).

Documented on https://appcd-dev.github.io/stackgen-sdk/code-samples/webhook-session-artifact/
under **Webhook → session → artifact**.

Usage:

  export WEBHOOK_TOKEN='sg_aios_…'
  python webhook-download-report.py \\
    --base-url https://app.stackgen.com \\
    --api-token stackgen_… \\
    --workspace-id <workspace-uuid> \\
    --query 'P1 | checkout-api error rate above SLO'
"""

from __future__ import annotations

import argparse
import os
import sys

from stackgen import StackgenClient, StackgenConfig


def main() -> int:
    parser = argparse.ArgumentParser(
        description="Trigger a webhook, wait for session_id, download session-report.md.",
    )
    parser.add_argument("--base-url", default=os.environ.get("STACKGEN_URL", ""), help="Mothership URL (no /guild suffix)")
    parser.add_argument("--api-token", default=os.environ.get("STACKGEN_TOKEN", ""), help="API token (stackgen_…)")
    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_PROJECT_ID", ""),
        help="Workspace UUID (sent as orgId)",
    )
    parser.add_argument(
        "--webhook-token",
        default="",
        help="Webhook token (sg_aios_…); or set WEBHOOK_TOKEN",
    )
    parser.add_argument("--query", required=True, help="Alert text or payload for the webhook")
    parser.add_argument(
        "--artifact-name",
        default="session-report.md",
        help="Session artifact filename to download",
    )
    parser.add_argument(
        "--output-path",
        default="session-report.md",
        help="Local path to write the artifact",
    )
    parser.add_argument("--timeout-seconds", type=int, default=1800)
    parser.add_argument("--poll-interval-seconds", type=int, default=5)
    args = parser.parse_args()

    webhook_token = (
        args.webhook_token
        or os.environ.get("STACKGEN_WEBHOOK_TOKEN", "")
        or os.environ.get("WEBHOOK_TOKEN", "")
    )
    if not args.base_url or not args.api_token or not args.workspace_id:
        print(
            "error: set --base-url/--api-token/--workspace-id or STACKGEN_URL/STACKGEN_TOKEN/STACKGEN_WORKSPACE_ID",
            file=sys.stderr,
        )
        return 2
    if not webhook_token:
        print("error: set --webhook-token or WEBHOOK_TOKEN", file=sys.stderr)
        return 2

    client = StackgenClient(
        StackgenConfig(
            base_url=args.base_url,
            api_token=args.api_token,
            webhook_token=webhook_token,
            workspace_id=args.workspace_id,
            artifact_name=args.artifact_name,
            output_path=args.output_path,
            timeout_seconds=args.timeout_seconds,
            poll_interval_seconds=args.poll_interval_seconds,
        )
    )
    result = client.aiden.run_webhook_and_download_report(
        args.query,
        artifact_name=args.artifact_name,
        output_path=args.output_path,
    )
    print(
        f"webhook_id={result.webhook_id} session_id={result.session_id} "
        f"output={result.output_path}",
        file=sys.stderr,
    )
    return 0


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