#!/usr/bin/env python3
"""HMN-only restricted ingest bridge; input data never appears in logs."""
import json
import subprocess
import sys

MAX_BYTES = 65536
COMMAND = ("/usr/bin/docker", "exec", "-i", "wgaccess-backend", "python", "-m", "app.services.hmn_event_ingest")


def deliver(raw, invoke=subprocess.run):
    if not raw or len(raw) > MAX_BYTES:
        return 2, "HMN_BRIDGE_REJECTED=size"
    try:
        # Host boundary: require exactly JSON object before invoking Docker.
        payload = json.loads(raw)
        if not isinstance(payload, dict):
            raise ValueError("not object")
    except (ValueError, UnicodeDecodeError):
        return 2, "HMN_BRIDGE_REJECTED=invalid_json"
    try:
        result = invoke(COMMAND, input=raw, capture_output=True, timeout=35, check=False)
    except (OSError, subprocess.TimeoutExpired):
        return 1, "HMN_BRIDGE_UNAVAILABLE=execution"
    if result.returncode != 0 or len(result.stdout) > 2048:
        return 1 if result.returncode != 2 else 2, "HMN_BRIDGE_REJECTED=backend" if result.returncode == 2 else "HMN_BRIDGE_UNAVAILABLE=backend"
    try:
        ack = json.loads(result.stdout)
        if not isinstance(ack, dict) or ack.get("status") not in ("accepted", "duplicate"):
            raise ValueError("bad ack")
        count = ack.get("events_added")
        if type(count) is not int or not 0 <= count <= 128:
            raise ValueError("bad count")
    except (ValueError, UnicodeDecodeError, TypeError):
        return 1, "HMN_BRIDGE_UNAVAILABLE=invalid_ack"
    return 0, json.dumps({"status": ack["status"], "events_added": count}, sort_keys=True)


def main():
    raw = sys.stdin.buffer.read(MAX_BYTES + 1)
    rc, message = deliver(raw)
    print(message, file=sys.stdout if rc == 0 else sys.stderr)
    return rc


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