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

# Get host multiarch for the path
DEB_HOST_MULTIARCH=$(dpkg-architecture -qDEB_HOST_MULTIARCH)

# Create a temporary directory for the minimal workspace
TEST_DIR=$(mktemp -d)
trap 'rm -rf "$TEST_DIR"' EXIT

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
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")

# Create WORKSPACE
touch WORKSPACE

# Create MODULE.bazel
cat <<EOF > MODULE.bazel
module(name = "test_hello")
bazel_dep(name = "rules_java")
bazel_dep(name = "bazel_skylib")
bazel_dep(name = "rules_cc")

java_toolchains = use_extension("@rules_java//java:extensions.bzl", "toolchains")
use_repo(java_toolchains, "local_jdk")

register_toolchains("@local_jdk//:all")
EOF

# Create BUILD
cat <<EOF > BUILD
load("@rules_java//java:defs.bzl", "java_binary")
java_binary(
    name = "hello",
    srcs = ["HelloWorld.java"],
    main_class = "HelloWorld",
)
EOF

# Create HelloWorld.java
cat <<EOF > HelloWorld.java
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World from Debian Bazel!");
    }
}
EOF

# Debug: list java_tools files
echo "DEBUG: Listing /usr/lib/${DEB_HOST_MULTIARCH}/bazel/java_tools/:"
ls -l /usr/lib/${DEB_HOST_MULTIARCH}/bazel/java_tools/ || true
echo "DEBUG: Listing /usr/share/bazel/tools/java_tools/:"
ls -l /usr/share/bazel/tools/java_tools/ || true

# Run bazel info to verify configuration
OUTPUT_BASE=$(bazel --batch info output_base)

# Build and run the java_binary
bazel --batch run "${override_args[@]}" --define=distribution=debian --verbose_failures \
 --override_repository=rules_java~~toolchains~remote_java_tools=/usr/lib/${DEB_HOST_MULTIARCH}/bazel/java_tools \
 --override_repository=rules_java~~toolchains~remote_java_tools_linux=/usr/lib/${DEB_HOST_MULTIARCH}/bazel/java_tools \
 --java_runtime_version=local_jdk \
 --tool_java_runtime_version=local_jdk \
 --javabase=@bazel_tools//tools/jdk:local_jdk \
 --host_javabase=@bazel_tools//tools/jdk:local_jdk \
 :hello
