#!/usr/bin/env python3
"""Report the current project/task to the Pipeline dashboard.

Usage:
    python report-project.py --project Pipeline --task "fixing bug" --status busy

Required environment variables:
    PIPELINE_BOT_KEY   API key generated from Settings → Bot API keys
    PIPELINE_URL       Pipeline base URL (default: http://localhost:8001)

Optional environment variables:
    PIPELINE_REPORT_TIMEOUT   Request timeout in seconds (default: 3)

Exit codes:
    0   success or env vars not configured (non-disruptive)
    1   HTTP error or unexpected failure
"""

from __future__ import annotations

import argparse
import json
import os
import sys
import urllib.error
import urllib.request


def main() -> int:
    parser = argparse.ArgumentParser(
        description="Report current project/task to Pipeline dashboard."
    )
    parser.add_argument("--project", default=None, help="Project name, e.g. Pipeline")
    parser.add_argument("--task", default=None, help="Current task description")
    parser.add_argument(
        "--status",
        default="busy",
        choices=["busy", "idle", "error"],
        help="Agent status (default: busy)",
    )
    parser.add_argument("--detail", default=None, help="Extra JSON detail string")
    args = parser.parse_args()

    bot_key = os.environ.get("PIPELINE_BOT_KEY", "").strip()
    base_url = os.environ.get("PIPELINE_URL", "http://localhost:8001").strip().rstrip("/")
    timeout = float(os.environ.get("PIPELINE_REPORT_TIMEOUT", "3"))

    if not bot_key:
        # Not configured — exit silently so the agent isn't disrupted.
        return 0

    payload: dict[str, object] = {
        "project": args.project,
        "task": args.task,
        "status": args.status,
    }
    if args.detail:
        try:
            payload["detail"] = json.loads(args.detail)
        except json.JSONDecodeError:
            payload["detail"] = {"raw": args.detail}

    body = json.dumps(payload).encode("utf-8")
    url = f"{base_url}/api/v1/bot/report"
    req = urllib.request.Request(
        url,
        data=body,
        method="POST",
        headers={
            "X-Bot-Key": bot_key,
            "Content-Type": "application/json",
            "User-Agent": "PipelineBotReport/1.0",
        },
    )
    try:
        with urllib.request.urlopen(req, timeout=timeout):
            pass
    except urllib.error.HTTPError as exc:
        print(f"report-project: HTTP {exc.code} from {url}", file=sys.stderr)
        return 1
    except (urllib.error.URLError, OSError) as exc:
        print(f"report-project: connection error: {exc}", file=sys.stderr)
        return 1

    return 0


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