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

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

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}
        if self.path.startswith("/set-cookie"):
            self.send_response(200)
            self.send_header("Set-Cookie","ecurl_test=1; Path=/")
            self.send_header("Content-Type","application/json")
            self.end_headers()
            self.wfile.write(json.dumps(out).encode("utf-8"))
            return
        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; do_PUT=do_ANY; do_DELETE=do_ANY
HTTPServer(('127.0.0.1', int(sys.argv[1])), H).serve_forever()
PY

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

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

# 2) Cookie/session persistence
SESSIONNAME="test1"
rm -f "$HOME/.ecurl_session.${SESSIONNAME}" || true
ecurl -u "http://127.0.0.1:${PORT}/set-cookie?x=" --session "$SESSIONNAME" -i "a" -q --json >/dev/null
grep -q "ecurl_test" "$HOME/.ecurl_session.${SESSIONNAME}"

# 3) Batch payloads
printf "p1\np2\n" > "$TMPDIR/payloads.txt"
ecurl --payload-file "$TMPDIR/payloads.txt" -u "http://127.0.0.1:${PORT}/echo?x=" --encode-type url -q >/dev/null
