#!/usr/bin/env python3
"""
check-quota.py — cek kuota lamaran user dari BE sebelum melamar.

GET {BE_API_URL}/v1/agent/quota?user_id=...  dengan header X-Internal-Token.
Output: satu baris JSON {used_today, limit_per_day, remaining_today, total_used, total_limit}
Agen Hermes WAJIB menjalankan ini SEBELUM tiap lamaran (via skill jobseeker-agent).

Pemakaian:
  python3 check-quota.py
"""
import json
import os
import sys
import urllib.request
import urllib.error
from pathlib import Path

CONFIG_FILE = Path(__file__).resolve().parent / "agent-config.env"


def load_config() -> dict:
    cfg = {
        "BE_API_URL": os.environ.get("BE_API_URL", ""),
        "BE_INTERNAL_TOKEN": os.environ.get("BE_INTERNAL_TOKEN", ""),
        "USER_ID": os.environ.get("USER_ID", ""),
    }
    if CONFIG_FILE.exists():
        for line in CONFIG_FILE.read_text().splitlines():
            line = line.strip()
            if not line or line.startswith("#") or "=" not in line:
                continue
            k, _, v = line.partition("=")
            k, v = k.strip(), v.strip()
            if k in cfg and not cfg[k]:
                cfg[k] = v
    missing = [k for k, v in cfg.items() if not v]
    if missing:
        print(f"ERROR: config kurang: {', '.join(missing)} (isi {CONFIG_FILE})", file=sys.stderr)
        sys.exit(2)
    return cfg


def main():
    cfg = load_config()
    url = cfg["BE_API_URL"].rstrip("/") + f"/v1/agent/quota?user_id={cfg['USER_ID']}"
    req = urllib.request.Request(
        url,
        method="GET",
        headers={"X-Internal-Token": cfg["BE_INTERNAL_TOKEN"]},
    )
    try:
        with urllib.request.urlopen(req, timeout=20) as resp:
            data = json.loads(resp.read().decode() or "{}")
            # BE produksi membungkus respons di {"data": {...}}
            if isinstance(data, dict) and "data" in data and isinstance(data["data"], dict):
                data = data["data"]
            print(json.dumps(data))
            remaining = int(data.get("remaining_today", 0))
            sys.exit(0 if remaining > 0 else 3)
    except urllib.error.HTTPError as e:
        print(f"ERROR: HTTP {e.code}: {e.read().decode()[:200]}", file=sys.stderr)
        sys.exit(1)
    except Exception as e:
        print(f"ERROR: {e}", file=sys.stderr)
        sys.exit(1)


if __name__ == "__main__":
    main()
