#!/usr/bin/env bash
set -euo pipefail

PORT=18091
PROXY=18092
TMPDIR="$(mktemp -d)"
trap 'kill "$PID" 2>/dev/null || true; kill "$PPID2" 2>/dev/null || true; rm -rf "$TMPDIR"' EXIT

# echo server
cat >"$TMPDIR/echo.py" <<'PY'
from http.server import BaseHTTPRequestHandler, HTTPServer
import json,sys
class H(BaseHTTPRequestHandler):
    def do_ANY(self):
        length = int(self.headers.get('Content-Length', 0))
        body = self.rfile.read(length).decode('utf-8') if length else ""
        out = {"path": self.path, "headers": dict(self.headers), "body": body}
        self.send_response(200); self.send_header("Content-Type","application/json"); self.end_headers()
        self.wfile.write(json.dumps(out).encode("utf-8"))
    do_GET=do_ANY; do_POST=do_ANY
HTTPServer(('127.0.0.1', int(sys.argv[1])), H).serve_forever()
PY

python3 "$TMPDIR/echo.py" "$PORT" >"$TMPDIR/srv.log" 2>&1 & PID=$!
sleep 0.3

# HTTP proxy via socat (simple forwarder)
# Accepts on PROXY and forwards to target host
socat TCP-LISTEN:$PROXY,fork,reuseaddr TCP:127.0.0.1:$PORT >"$TMPDIR/proxy.log" 2>&1 & PPID2=$!
sleep 0.2

resp="$(HTTP_PROXY="http://127.0.0.1:${PROXY}" ecurl -u "http://127.0.0.1:${PORT}/echo?x=" -X POST -d "foo=bar" -H "X-Test: ecurl" -i "hi" --json -q --timeout 5)"
jq -e '.response' <<<"$resp" >/dev/null
