#!/bin/bash
# Test-Ersatz fuer docker: fasst nie einen echten Daemon an. "compose config"
# geht an das echte docker (liest nur), "up" startet fakesvc.py als Panel,
# hostd und coturn, "exec panel python -c" laeuft gegen das echte bridge/users.py.
. "$(dirname "$0")/../stublib"
log "$*"
real() { PATH=$(printf '%s' "$PATH" | tr ':' '\n' | grep -v '/installer/tests/stubs/' | paste -sd: -) command -v docker; }
case "$1" in
--version) echo "Docker version 29.6.2, build stub"; exit 0 ;;
version) echo "29.6.2"; exit 0 ;;
info) echo "Server: stub"; exit 0 ;;
buildx) echo "github.com/docker/buildx v0.35.0 stub"; exit 0 ;;
image) if [ "$2" = inspect ]; then [ -e "$ST/built" ]; exit; fi; exit 0 ;;
network) [ "$2" = inspect ] && exit 1; exit 0 ;;
ps | inspect | rm | pull) exit 0 ;;
run)
	# Netzpruefung vor dem Bau (installer/lib/nettest.py): Ergebnis aus fixtures/
	case " $* " in *nettest.py*)
		f=${STUB_NETTEST_JSON:-$(dirname "$0")/../../fixtures/nettest-ok.json}
		case " $* " in *" --network host "*) f=${STUB_NETTEST_HOST_JSON:-$f} ;; esac
		cat "$f"
		;;
	esac
	exit 0
	;;
compose) ;;
*) exit 0 ;;
esac
shift
args=("$@")
sub='' i=0
while [ $i -lt ${#args[@]} ]; do
	case "${args[$i]}" in
	-p | --project-directory | -f | --env-file | --profile | --progress) i=$((i + 2)); continue ;;
	-*) i=$((i + 1)); continue ;;
	*) sub=${args[$i]}; break ;;
	esac
done
rest=("${args[@]:$((i + 1))}")
envf=${STUB_INSTALL_DIR:?}/.env
val() { sed -n "s/^$1=//p" "$envf" | tail -n1; }
fake_up() {
	if [ -e "$ST/svc.pid" ] && kill -0 "$(cat "$ST/svc.pid")" 2>/dev/null; then return 0; fi
	python3 "$(dirname "$0")/fakesvc.py" "$(val PANEL_PORT)" "$(val HOSTD_PORT)" "$(val TURN_PORT)" "$(val HOSTD_TOKEN)" >/dev/null 2>&1 &
	echo $! >"$ST/svc.pid"
	sleep 1
}
case "$sub" in
version) echo "5.3.1" ;;
config) r=$(real) || exit 0; exec "$r" compose "$@" ;;
build)
	if [ "${STUB_BUILD_FAIL:-0}" = 1 ]; then
		if [ -n "${STUB_BUILD_LOG:-}" ]; then cat "$STUB_BUILD_LOG"; fi
		echo "#9 [bridge-image build 1/9] RUN apt-get update"
		echo "ERROR: failed to solve: process \"/bin/sh -c apt-get update\" did not complete successfully: exit code: 100 (stub)"
		exit 17
	fi
	for s in caddy panel hostd bridge-image; do echo "#1 [$s] building (stub)"; done
	touch "$ST/built" ;;
up | start) fake_up; echo "Container gestartet (stub)" ;;
down | stop) [ -e "$ST/svc.pid" ] && kill "$(cat "$ST/svc.pid")" 2>/dev/null; rm -f "$ST/svc.pid"; echo "gestoppt (stub)" ;;
ps) case " ${rest[*]} " in *" -q "*) [ -e "$ST/svc.pid" ] && echo 0123456789ab ;; *) printf 'SERVICE   STATE     STATUS\ncaddy     running   Up 1 minute\npanel     running   Up 1 minute\n' ;; esac ;;
logs) echo '{"level":"error","msg":"could not get certificate from issuer","error":"HTTP 400 urn:ietf:params:acme:error:dns - NXDOMAIN looking up A (stub)"}' ;;
exec)
	code='' j=0
	for a in "${rest[@]}"; do [ "$a" = -c ] && code=${rest[$((j + 1))]}; j=$((j + 1)); done
	dr=$(val DATA_ROOT)
	code=${code//\"\/data\"/\"$dr/panel\"}
	cd "$STUB_INSTALL_DIR/bridge" && exec env PYTHONDONTWRITEBYTECODE=1 python3 -c "$code" ;;
esac
exit 0
