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

fail() {
  echo "error: $*" >&2
  exit 1
}

managed_opencode_magic() {
  local path="$1"
  od -An -tx1 -N4 "${path}" | tr -d ' \n'
}

validate_managed_opencode_binary() {
  local target_goos="$1"
  local path="$2"
  [[ -n "${path}" ]] || fail "managed OpenCode source path is required"
  [[ -f "${path}" ]] || fail "managed OpenCode binary not found: ${path}"
  [[ -x "${path}" ]] || fail "managed OpenCode binary is not executable: ${path}"

  local magic
  magic="$(managed_opencode_magic "${path}")"
  case "${target_goos}" in
    darwin)
      case "${magic}" in
        cffaedfe|cefaedfe|feedfacf|feedface|cafebabe|bebafeca) ;;
        *) fail "managed OpenCode source for darwin must be a Mach-O binary, not an npm shim or text wrapper: ${path}" ;;
      esac
      ;;
    linux)
      [[ "${magic}" == "7f454c46" ]] || fail "managed OpenCode source for linux must be an ELF binary, not an npm shim or text wrapper: ${path}"
      ;;
    windows)
      [[ "${magic:0:4}" == "4d5a" ]] || fail "managed OpenCode source for windows must be a PE executable, not an npm shim or text wrapper: ${path}"
      ;;
    *)
      fail "unsupported managed OpenCode target OS: ${target_goos}"
      ;;
  esac
}

if [[ "${BASH_SOURCE[0]}" == "$0" ]]; then
  if [[ $# -ne 2 ]]; then
    fail "usage: $0 <target-goos> <opencode-binary-path>"
  fi
  validate_managed_opencode_binary "$1" "$2"
fi
