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

ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
cd "$ROOT"

tmp_root=${TMPDIR:-/tmp}
fixture_dir=$(mktemp -d "${tmp_root%/}/observability-guardrail.XXXXXX")
fixture_file="${fixture_dir}/inline_go.go"
trap 'rm -rf "${fixture_dir}"' EXIT

cat >"${fixture_file}" <<'EOF'
package observabilityguardrailfixture

func safe() {
	_ = "go worker.Run(ctx)"
	_ = `go (worker.Run)()`
	// go worker.Run(ctx)
	/* go func() {}() */
}
EOF
OBSERVABILITY_GUARDRAIL_EXTRA_GO_FILES="${fixture_file}" bash guardrails/observability/check-observability.sh >/dev/null

for statement in \
	'once.Do(func() { go worker.Run(ctx) })' \
	'go (worker.Run)()' \
	'go workers[0]()'
do
	printf 'package observabilityguardrailfixture\n\nfunc unsafe() {\n\t%s\n}\n' "${statement}" >"${fixture_file}"
	set +e
	output=$(OBSERVABILITY_GUARDRAIL_EXTRA_GO_FILES="${fixture_file}" bash guardrails/observability/check-observability.sh 2>&1)
	status=$?
	set -e

	[[ "${status}" -ne 0 ]]
	grep -F "${fixture_file}: production goroutine roots must use logging.Go" <<<"${output}" >/dev/null
done

echo "Observability guardrail fixtures passed."
