#!/bin/bash
export http_proxy=127.0.0.1:9
export https_proxy=127.0.0.1:9

# Create a temporary standalone project directory to isolate from Bazel's own MODULE.bazel
TEST_DIR=$(mktemp -d)
trap 'rm -rf "$TEST_DIR"' EXIT

# Copy the C++ examples to the isolated test directory
mkdir -p "$TEST_DIR/examples/cpp"
cp examples/cpp/* "$TEST_DIR/examples/cpp/"

# Create a clean, minimal WORKSPACE and MODULE.bazel for the test project
touch "$TEST_DIR/WORKSPACE"
cat <<EOF > "$TEST_DIR/MODULE.bazel"
module(name = "test_hello")
bazel_dep(name = "bazel_skylib")
bazel_dep(name = "rules_cc")
EOF

# Execute the test in the isolated directory
cd "$TEST_DIR"

override_args=()

# Create mock apple_support to satisfy offline bzlmod resolution of bazel_tools
mkdir -p mock_apple_support
echo 'module(name = "apple_support")' > mock_apple_support/MODULE.bazel
touch mock_apple_support/BUILD
override_args+=("--override_module=apple_support=$TEST_DIR/mock_apple_support")

# Create mock protobuf to satisfy offline bzlmod resolution of rules_proto/rules_cc
mkdir -p mock_protobuf
echo 'module(name = "protobuf")' > mock_protobuf/MODULE.bazel
touch mock_protobuf/BUILD
override_args+=("--override_module=protobuf=$TEST_DIR/mock_protobuf")

# Create mock buildozer to satisfy offline bzlmod resolution
mkdir -p mock_buildozer
echo 'module(name = "buildozer")' > mock_buildozer/MODULE.bazel
touch mock_buildozer/BUILD
override_args+=("--override_module=buildozer=$TEST_DIR/mock_buildozer")

# Mock zlib with system linking
mkdir -p mock_zlib
echo 'module(name = "zlib")' > mock_zlib/MODULE.bazel
cat <<EOF > mock_zlib/BUILD
cc_library(
    name = "zlib",
    linkopts = ["-lz"],
    visibility = ["//visibility:public"],
)
EOF
override_args+=("--override_module=zlib=$TEST_DIR/mock_zlib")

bazel --batch test "${override_args[@]}" --define=distribution=debian --verbose_failures //examples/cpp:hello-fail_test

if [ $? -eq 3 ]; then
  exit 0
else
  exit 1
fi
