#!/usr/bin/env python3
import argparse
import json
import sys
import requests

def headers(api_key: str):
    return {"X-API-Key": api_key, "Content-Type": "application/json"}

def pretty(obj):
    print(json.dumps(obj, indent=2))

def main():
    p = argparse.ArgumentParser(description="Scorpio License Admin CLI")
    p.add_argument("--base-url", default="https://license.scorpioevents.au")
    p.add_argument("--api-key", required=True)

    sub = p.add_subparsers(dest="cmd", required=True)

    issue = sub.add_parser("issue")
    issue.add_argument("--email")
    issue.add_argument("--name")
    issue.add_argument("--product", default="Scorpios Tracks Snort 2025 v2")
    issue.add_argument("--max-activations", type=int, default=3)
    issue.add_argument("--send-email", action="store_true")

    ls = sub.add_parser("list")
    ls.add_argument("--status")

    show = sub.add_parser("show")
    show.add_argument("license_key")

    status = sub.add_parser("status")
    status.add_argument("license_key")
    status.add_argument("new_status", choices=["active", "suspended", "revoked"])

    reset = sub.add_parser("reset")
    reset.add_argument("license_key")

    args = p.parse_args()

    if args.cmd == "issue":
        payload = {
            "customer_email": args.email,
            "customer_name": args.name,
            "product_name": args.product,
            "max_activations": args.max_activations,
            "send_email_to_customer": args.send_email,
        }
        r = requests.post(f"{args.base_url}/admin/issue", headers=headers(args.api_key), json=payload, timeout=30)
        pretty(r.json())
        r.raise_for_status()

    elif args.cmd == "list":
        params = {}
        if args.status:
            params["status"] = args.status
        r = requests.get(f"{args.base_url}/admin/licenses", headers=headers(args.api_key), params=params, timeout=30)
        pretty(r.json())
        r.raise_for_status()

    elif args.cmd == "show":
        r = requests.get(f"{args.base_url}/admin/licenses/{args.license_key}", headers=headers(args.api_key), timeout=30)
        pretty(r.json())
        r.raise_for_status()

    elif args.cmd == "status":
        payload = {"license_key": args.license_key, "status": args.new_status}
        r = requests.post(f"{args.base_url}/admin/status", headers=headers(args.api_key), json=payload, timeout=30)
        pretty(r.json())
        r.raise_for_status()

    elif args.cmd == "reset":
        payload = {"license_key": args.license_key}
        r = requests.post(f"{args.base_url}/admin/reset-activations", headers=headers(args.api_key), json=payload, timeout=30)
        pretty(r.json())
        r.raise_for_status()

if __name__ == "__main__":
    main()
