#!/bin/bash
# Copyright 2025 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/../../lib/platform.sh || exit $?

BT_FILE_DEPS=(
    # "prebuilt/third_party/jq/${HOST_PLATFORM}/bin/jq"
    "scripts/fx"
    # "scripts/fuchsia-vendored-python"
    # "scripts/fuchsia-vendored-python3.11"
    "build/bazel/wrapper.bazel.sh"
    "scripts/hermetic-env"
    "tools/devshell/bazel"
    "tools/devshell/lib/bazel_utils.sh"
    "tools/devshell/lib/platform.sh"
    "tools/devshell/lib/vars.sh"
    #"tools/devshell/jq.fx"
    # "tools/devshell/lib/build_api_client.sh"
    "tools/devshell/lib/fx-cmd-locator.sh"
    "tools/devshell/lib/fx-optional-features.sh"
    "tools/devshell/lib/platform.sh"
    "tools/devshell/lib/generate-ssh-config.sh"
)

declare fx

BT_MKDIR_DEPS=(
    "out/default"
)

BT_MOCKED_TOOLS=(
  "build/api/client"
  "build/regenerator"
  "scripts/fuchsia-vendored-python"
  "tools/devshell/rbe"
  "tools/devshell/lib/platform.sh"
  "tools/devshell/contrib/lib/count-ninja-actions.py"
  "tools/integration/bootstrap.sh"
)

BT_SET_UP() {
    source "${BT_TEMP_DIR}/tools/devshell/tests/lib/fuchsia-mock.sh"
    fx="$(btf::setup_fx)"
    TEST_BUILD_DIR="${BT_TEMP_DIR}/out/default"

    bazel_bin="$(btf::make_mock_binary bin/bazel)"
    ninja_bin="$(btf::make_mock_binary bin/ninja)"
    python3_bin="$(btf::make_mock_binary bin/python3)"
    echo 0 > "${python3_bin}.mock_status"
    python3_dir="$(dirname "${python3_bin}")"

    bazel_workspace_dir="${TEST_BUILD_DIR}/bazel_workspace"
    mkdir -p "${bazel_workspace_dir}"

    bazel_output_base="${TEST_BUILD_DIR}/bazel_output_base"
    bazel_output_user_root="${TEST_BUILD_DIR}/bazel_output_user_root"

    bazel="${TEST_BUILD_DIR}/bazel"
    ln -sf "${BT_TEMP_DIR}/build/bazel/wrapper.bazel.sh" "${bazel}"

    bazel_log_dir="${TEST_BUILD_DIR}/bazel_logs"

    bazel_sh_config="${TEST_BUILD_DIR}/bazel.sh.config"
    cat > "${bazel_sh_config}" <<EOF
_BAZEL_BIN="${bazel_bin}"
_BAZEL_LOG_DIR="${bazel_log_dir}"
_BAZEL_WORKSPACE="${bazel_workspace_dir}"
_BAZEL_OUTPUT_BASE="${bazel_output_base}"
_BAZEL_OUTPUT_USER_ROOT="${bazel_output_user_root}"
_NINJA_BUILD_DIR="${TEST_BUILD_DIR}"
_PREBUILT_NINJA="${ninja_bin}"
_PREBUILT_PYTHON_DIR="${python3_dir}"
EOF

    mkdir -p "${python3_dir}"
}

TEST_bazel-wrapper-no-config-file() {
    rm -f "${bazel_sh_config}"
    "${bazel}" 2> stderr.txt || true
    BT_EXPECT_FILE_CONTAINS stderr.txt "ERROR: Missing Bazel script config file: ${bazel_sh_config}"
}

TEST_bazel-wrapper-config-with-missing-variables() {
    config_variables=($(sed 's|=.*$||g' "${bazel_sh_config}"))
    cp "${bazel_sh_config}" "${bazel_sh_config}.origin"
    for var in "${config_variables[@]}"; do
      cp -f "${bazel_sh_config}.origin" "${bazel_sh_config}"
      sed -i -e "/^${var}=/d" "${bazel_sh_config}"
      "${bazel}" 2> stderr.txt || true
      BT_EXPECT_FILE_CONTAINS stderr.txt "ERROR: Missing ${var} config variable"
    done
}

TEST_parse-bazel-command-default() {
    source "${bazel}"

    parse_bazel_command
    BT_EXPECT_EQ "${_BAZEL_COMMAND}" ""
    BT_EXPECT_EQ "${_BAZEL_PRE_COMMAND_ARGS[*]}" ""
    BT_EXPECT_EQ "${_BAZEL_POST_COMMAND_ARGS[*]}" ""
    BT_EXPECT_EQ "${_BAZEL_REST_ARGS[*]}" ""

    parse_bazel_command build //foo
    BT_EXPECT_EQ "${_BAZEL_COMMAND}" "build"
    BT_EXPECT_EQ "${_BAZEL_PRE_COMMAND_ARGS[*]}" ""
    BT_EXPECT_EQ "${_BAZEL_POST_COMMAND_ARGS[*]}" "//foo"
    BT_EXPECT_EQ "${_BAZEL_REST_ARGS[*]}" ""

    parse_bazel_command --pre-option command arg --post-option
    BT_EXPECT_EQ "${_BAZEL_COMMAND}" "command"
    BT_EXPECT_EQ "${_BAZEL_PRE_COMMAND_ARGS[*]}" "--pre-option"
    BT_EXPECT_EQ "${_BAZEL_POST_COMMAND_ARGS[*]}" "arg --post-option"
    BT_EXPECT_EQ "${_BAZEL_REST_ARGS[*]}" ""

    parse_bazel_command run --config-opt -- //target:label --command-opt command-arg
    BT_EXPECT_EQ "${_BAZEL_COMMAND}" "run"
    BT_EXPECT_EQ "${_BAZEL_PRE_COMMAND_ARGS[*]}" ""
    BT_EXPECT_EQ "${_BAZEL_POST_COMMAND_ARGS[*]}" "--config-opt"
    BT_EXPECT_EQ "${_BAZEL_REST_ARGS[*]}" "-- //target:label --command-opt command-arg"
}

TEST_bazel_wrapper_no_command() {
    "${bazel}"
    expected_invocation=(
      env USER=$USER
      "${bazel_bin}"
      --nohome_rc
      --output_base="${bazel_output_base}"
      --output_user_root="${bazel_output_user_root}"
      --bazelrc="${TEST_BUILD_DIR}/regenerator_outputs/remote_services.bazelrc"
    )
    BT_EXPECT_FILE_CONTAINS "${bazel_log_dir}/bazel_invocation" "${expected_invocation[*]}"

    source "${bazel_bin}.mock_state"
    BT_EXPECT_EQ "${#BT_MOCK_ARGS[@]}" 5
    BT_EXPECT_EQ "${BT_MOCK_ARGS[0]}" "${bazel_bin}"
    BT_EXPECT_EQ "${BT_MOCK_ARGS[1]}" --nohome_rc
    BT_EXPECT_EQ "${BT_MOCK_ARGS[2]}" --output_base="${bazel_output_base}"
    BT_EXPECT_EQ "${BT_MOCK_ARGS[3]}" --output_user_root="${bazel_output_user_root}"
    BT_EXPECT_EQ "${BT_MOCK_ARGS[4]}" --bazelrc="${TEST_BUILD_DIR}"/regenerator_outputs/remote_services.bazelrc
}

TEST_bazel_wrapper_no_user_defined() {
    USER= "${bazel}"
    expected_invocation=(
      env USER=unused-bazel-build-user
      "${bazel_bin}"
      --nohome_rc
      --output_base=${bazel_output_base}
      --output_user_root=${bazel_output_user_root}
      --bazelrc="${TEST_BUILD_DIR}/regenerator_outputs/remote_services.bazelrc"
    )
    BT_EXPECT_FILE_CONTAINS "${bazel_log_dir}/bazel_invocation" "${expected_invocation[*]}"

    source "${bazel_bin}.mock_state"
    BT_EXPECT_EQ "${#BT_MOCK_ARGS[@]}" 5
    BT_EXPECT_EQ "${BT_MOCK_ARGS[0]}" "${bazel_bin}"
    BT_EXPECT_EQ "${BT_MOCK_ARGS[1]}" --nohome_rc
    BT_EXPECT_EQ "${BT_MOCK_ARGS[2]}" --output_base="${bazel_output_base}"
    BT_EXPECT_EQ "${BT_MOCK_ARGS[3]}" --output_user_root="${bazel_output_user_root}"
    BT_EXPECT_EQ "${BT_MOCK_ARGS[4]}" --bazelrc="${TEST_BUILD_DIR}"/regenerator_outputs/remote_services.bazelrc
}

TEST_bazel_wrapper_build_command() {
    "${bazel}" build --config=some_config //some:target
    source "${bazel_bin}.mock_state"
    BT_EXPECT_EQ "${#BT_MOCK_ARGS[@]}" 8
    BT_EXPECT_EQ "${BT_MOCK_ARGS[0]}" "${bazel_bin}"
    BT_EXPECT_EQ "${BT_MOCK_ARGS[1]}" --nohome_rc
    BT_EXPECT_EQ "${BT_MOCK_ARGS[2]}" --output_base="${bazel_output_base}"
    BT_EXPECT_EQ "${BT_MOCK_ARGS[3]}" --output_user_root="${bazel_output_user_root}"
    BT_EXPECT_EQ "${BT_MOCK_ARGS[4]}" --bazelrc="${TEST_BUILD_DIR}"/regenerator_outputs/remote_services.bazelrc
    BT_EXPECT_EQ "${BT_MOCK_ARGS[5]}" build
    BT_EXPECT_EQ "${BT_MOCK_ARGS[6]}" --config=some_config
    BT_EXPECT_EQ "${BT_MOCK_ARGS[7]}" //some:target
}

TEST_bazel_wrapper_build_command_with_disk_cache() {
    FUCHSIA_BAZEL_DISK_CACHE="${BT_TEMP_DIR}/disk-cache" \
    "${bazel}" build --config=some_config //some:target
    source "${bazel_bin}.mock_state"
    BT_EXPECT_EQ "${#BT_MOCK_ARGS[@]}" 9
    BT_EXPECT_EQ "${BT_MOCK_ARGS[0]}" "${bazel_bin}"
    BT_EXPECT_EQ "${BT_MOCK_ARGS[1]}" --nohome_rc
    BT_EXPECT_EQ "${BT_MOCK_ARGS[2]}" --output_base="${bazel_output_base}"
    BT_EXPECT_EQ "${BT_MOCK_ARGS[3]}" --output_user_root="${bazel_output_user_root}"
    BT_EXPECT_EQ "${BT_MOCK_ARGS[4]}" --bazelrc="${TEST_BUILD_DIR}"/regenerator_outputs/remote_services.bazelrc
    BT_EXPECT_EQ "${BT_MOCK_ARGS[5]}" build
    BT_EXPECT_EQ "${BT_MOCK_ARGS[6]}" --disk_cache="${BT_TEMP_DIR}"/disk-cache
    BT_EXPECT_EQ "${BT_MOCK_ARGS[7]}" --config=some_config
    BT_EXPECT_EQ "${BT_MOCK_ARGS[8]}" //some:target
}

BT_RUN_TESTS "$@"
