# shellcheck shell=bash

run_managed_runtime_tests() {
  MANAGED_OPENCODE_VERSION="9.9.9"
  MANAGED_OPENCODE_NPM_REGISTRY="https://example.invalid/npm"
  MANAGED_OPENCODE_CACHE_DIR="${TEST_DIR}/managed-opencode"
  MANAGED_OPENCODE_CONFIG_PATH="${SCRIPT_DIR}/managed-opencode.env"
  MANAGED_OPENCODE_DARWIN_ARM64_SOURCE=""
  MANAGED_OPENCODE_DARWIN_AMD64_SOURCE=""
  MANAGED_OPENCODE_WINDOWS_ARM64_SOURCE=""
  MANAGED_OPENCODE_WINDOWS_AMD64_SOURCE=""
  MANAGED_OPENCODE_MODELS_SOURCE=""
  MANAGED_OPENCODE_MODELS_URL="https://models.dev/api.json"
  AGENTTEAM_TEST_MODELS_FETCH_LOG="${TEST_DIR}/models-fetch.log"
  export AGENTTEAM_TEST_MODELS_FETCH_LOG
  : > "${AGENTTEAM_TEST_MODELS_FETCH_LOG}"

  ensure_managed_opencode_sources >/dev/null

  assert_file "${MANAGED_OPENCODE_DARWIN_ARM64_SOURCE}"
  assert_file "${MANAGED_OPENCODE_DARWIN_AMD64_SOURCE}"
  assert_file "${MANAGED_OPENCODE_WINDOWS_ARM64_SOURCE}"
  assert_file "${MANAGED_OPENCODE_WINDOWS_AMD64_SOURCE}"
  assert_file "${MANAGED_OPENCODE_MODELS_SOURCE}"
  assert_executable "${MANAGED_OPENCODE_DARWIN_ARM64_SOURCE}"
  assert_executable "${MANAGED_OPENCODE_DARWIN_AMD64_SOURCE}"
  assert_executable "${MANAGED_OPENCODE_WINDOWS_ARM64_SOURCE}"
  assert_executable "${MANAGED_OPENCODE_WINDOWS_AMD64_SOURCE}"
  [[ "${MANAGED_OPENCODE_DARWIN_ARM64_SOURCE}" == "${MANAGED_OPENCODE_CACHE_DIR}/9.9.9/opencode-darwin-arm64/package/bin/opencode" ]] || fail "unexpected macOS arm64 runtime"
  [[ "${MANAGED_OPENCODE_DARWIN_AMD64_SOURCE}" == "${MANAGED_OPENCODE_CACHE_DIR}/9.9.9/opencode-darwin-x64/package/bin/opencode" ]] || fail "unexpected macOS x64 runtime"
  [[ "${MANAGED_OPENCODE_WINDOWS_ARM64_SOURCE}" == "${MANAGED_OPENCODE_CACHE_DIR}/9.9.9/opencode-windows-arm64/package/bin/opencode.exe" ]] || fail "unexpected Windows arm64 runtime"
  [[ "${MANAGED_OPENCODE_WINDOWS_AMD64_SOURCE}" == "${MANAGED_OPENCODE_CACHE_DIR}/9.9.9/opencode-windows-x64/package/bin/opencode.exe" ]] || fail "unexpected Windows x64 runtime"
  [[ "$(wc -l < "${AGENTTEAM_TEST_MODELS_FETCH_LOG}")" -eq 1 ]] ||
    fail "models.dev must be fetched exactly once while filling an empty cache"
  MANAGED_OPENCODE_MODELS_SOURCE=""
  ensure_managed_opencode_models_source
  [[ "$(wc -l < "${AGENTTEAM_TEST_MODELS_FETCH_LOG}")" -eq 1 ]] ||
    fail "a cached models catalog must be used without another models.dev request"

  local checksum_input="${TEST_DIR}/checksum-input"
  local checksum_output="${TEST_DIR}/checksum-output"
  printf 'abc' > "${checksum_input}"
  : > "${checksum_output}"
  append_sha256sum "${checksum_output}" "${checksum_input}"
  assert_log_contains "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad  checksum-input" "${checksum_output}"

  local text_shim="${TEST_DIR}/opencode-text-shim"
  printf '#!/usr/bin/env node\n' > "${text_shim}"
  chmod 0755 "${text_shim}"
  if bash "${SCRIPT_DIR}/managed-opencode-validate.sh" darwin "${text_shim}" >/dev/null 2>&1; then
    fail "expected text shim validation to fail"
  fi
}
