import json, os, sys, urllib.request, urllib.parse, urllib.error

MIN_SEVERITY = {"Informational": "high,moderate,informational", "Moderate": "high,moderate", "Critical": "high"}


def _cfg():
    s = json.loads(os.environ.get("INTEGRATION_SECRETS", "{}"))
    base = "https://api.securitytrails.com/v1/asi"
    headers = {"APIKEY": s.get("api_key", ""), "Accept": "application/json"}
    project = str(s.get("project_id", ""))
    min_sev = str(s.get("min_severity") or "Moderate")
    return base, headers, project, min_sev


def _inputs():
    return json.loads(os.environ.get("INTEGRATION_INPUTS", "{}"))


def request(path, params):
    base, headers, _, _ = _cfg()
    clean = {k: v for k, v in params.items() if v not in (None, "")}
    url = base + "/" + path.lstrip("/") + ("?" + urllib.parse.urlencode(clean, doseq=True) if clean else "")
    req = urllib.request.Request(url, headers=headers, method="GET")
    with urllib.request.urlopen(req, timeout=90) as r:
        raw = r.read()
        return json.loads(raw) if raw else {}


def run():
    _, _, project, min_sev = _cfg()
    inp = _inputs()
    params = {
        "rule_action": "added",
        "start": inp.get("start"),
        "classification": MIN_SEVERITY.get(min_sev, "high,moderate"),
    }
    print(json.dumps(request("/rules/history/" + urllib.parse.quote(project, safe="") + "/activity", params)))


try:
    run()
except urllib.error.HTTPError as e:
    print(json.dumps({"error": "HTTP " + str(e.code), "detail": e.read().decode("utf-8", "replace")}))
    sys.exit(1)
except Exception as e:
    print(json.dumps({"error": str(e)}))
    sys.exit(1)
