#!/bin/sh
set -eu

OCTO_RELEASE_VERSION='0.1.0'
OCTO_RELEASE_PLATFORM='darwin'
OCTO_RELEASE_ARCH='arm64'
OCTO_ARTIFACT_NAME='octo-cli-darwin-arm64-0.1.0'
OCTO_EXPECTED_BYTES='54844826'
OCTO_EXPECTED_SHA256='b6b01a5eca37539bb301173ae75eeaa7e858d9cd9924094e7b261dd3a31426f9'
OCTO_INSTALL_ORIGIN=${OCTO_INSTALL_ORIGIN:-'https://dreamina-cli.xuanli.ai'}
OCTO_RELEASE_BASE="${OCTO_INSTALL_ORIGIN%/}/releases/$OCTO_RELEASE_VERSION/$OCTO_RELEASE_PLATFORM-$OCTO_RELEASE_ARCH"

fail() {
  printf 'Octo CLI 安装失败：%s\n' "$1" >&2
  exit 1
}

command -v curl >/dev/null 2>&1 || fail '缺少 curl。'
command -v tar >/dev/null 2>&1 || fail '缺少 tar。'

OCTO_SYSTEM=$(uname -s)
OCTO_MACHINE=$(uname -m)
if [ "$OCTO_SYSTEM" = 'Darwin' ] && [ "$OCTO_MACHINE" = 'x86_64' ]; then
  if [ "$(sysctl -in sysctl.proc_translated 2>/dev/null || true)" = '1' ]; then
    OCTO_MACHINE='arm64'
  fi
fi
if [ "$OCTO_SYSTEM" != 'Darwin' ] || [ "$OCTO_MACHINE" != 'arm64' ]; then
  fail "当前发布仅支持 macOS Apple Silicon，检测到 $OCTO_SYSTEM/$OCTO_MACHINE。"
fi

case "$OCTO_INSTALL_ORIGIN" in
  https://*) ;;
  http://127.0.0.1:*|http://localhost:*) ;;
  *) fail '安装源必须使用 HTTPS；仅本机测试允许 loopback HTTP。' ;;
esac

OCTO_TMP_ROOT=$(mktemp -d "${TMPDIR:-/tmp}/octo-cli-web-install.XXXXXX")
OCTO_PAYLOAD="$OCTO_TMP_ROOT/payload"
trap 'rm -rf "$OCTO_TMP_ROOT"' EXIT HUP INT TERM
: > "$OCTO_PAYLOAD"

hash_file() {
  if command -v shasum >/dev/null 2>&1; then
    shasum -a 256 "$1" | awk '{print $1}'
  elif command -v sha256sum >/dev/null 2>&1; then
    sha256sum "$1" | awk '{print $1}'
  else
    openssl dgst -sha256 "$1" | awk '{print $NF}'
  fi
}

download_chunk() {
  OCTO_CHUNK_NAME=$1
  OCTO_CHUNK_SHA256=$2
  OCTO_CHUNK_BYTES=$3
  OCTO_CHUNK_PATH="$OCTO_TMP_ROOT/$OCTO_CHUNK_NAME"
  printf '下载 %s...\n' "$OCTO_CHUNK_NAME"
  case "$OCTO_INSTALL_ORIGIN" in
    https://*)
      curl --fail --location --silent --show-error --retry 3 \
        --proto '=https' --tlsv1.2 \
        "$OCTO_RELEASE_BASE/$OCTO_CHUNK_NAME" --output "$OCTO_CHUNK_PATH"
      ;;
    *)
      curl --fail --location --silent --show-error --retry 3 \
        "$OCTO_RELEASE_BASE/$OCTO_CHUNK_NAME" --output "$OCTO_CHUNK_PATH"
      ;;
  esac
  OCTO_ACTUAL_BYTES=$(wc -c < "$OCTO_CHUNK_PATH" | tr -d '[:space:]')
  [ "$OCTO_ACTUAL_BYTES" = "$OCTO_CHUNK_BYTES" ] || fail "$OCTO_CHUNK_NAME 文件大小校验失败。"
  OCTO_ACTUAL_SHA256=$(hash_file "$OCTO_CHUNK_PATH")
  [ "$OCTO_ACTUAL_SHA256" = "$OCTO_CHUNK_SHA256" ] || fail "$OCTO_CHUNK_NAME SHA-256 校验失败。"
  cat "$OCTO_CHUNK_PATH" >> "$OCTO_PAYLOAD"
  rm -f "$OCTO_CHUNK_PATH"
}

download_chunk 'payload.part-000' '130e4719d93aa4c012c571e11d6bb7455d9cf012b53d2a5752c71a0dd9c5d69b' '8388608'
download_chunk 'payload.part-001' 'b40113321d8347e1cf19b270890a70e514412e21c402d39e6e472af4c1d6d1f3' '8388608'
download_chunk 'payload.part-002' 'f95539c93db41fe628cbdc29c97682107330e0ef1e115d1dc45bc54c7ffd73ee' '8388608'
download_chunk 'payload.part-003' '9eaec14a70f4295ce75641cff3f16d7b24afcd9ba0f2b727d50682ad22a7bc36' '8388608'
download_chunk 'payload.part-004' 'c80431c8a190fc64f52c37fb76c22a57db4d88305d2e7c1b7591430caca4b512' '8388608'
download_chunk 'payload.part-005' '8b2d1aaec0986c8d520b01e8c60b2c4b8fc6c6e8d28a9fabbf2f767acd393f33' '8388608'
download_chunk 'payload.part-006' '2a78e1c87df5043f78ee48f720a2bf637f0a368a51cb123addc6c0b6907f249b' '4513178'

OCTO_ACTUAL_BYTES=$(wc -c < "$OCTO_PAYLOAD" | tr -d '[:space:]')
[ "$OCTO_ACTUAL_BYTES" = "$OCTO_EXPECTED_BYTES" ] || fail '完整载荷文件大小校验失败。'
OCTO_ACTUAL_SHA256=$(hash_file "$OCTO_PAYLOAD")
[ "$OCTO_ACTUAL_SHA256" = "$OCTO_EXPECTED_SHA256" ] || fail '完整载荷 SHA-256 校验失败。'

tar -xzf "$OCTO_PAYLOAD" -C "$OCTO_TMP_ROOT"
OCTO_EXTRACTED_ROOT="$OCTO_TMP_ROOT/$OCTO_ARTIFACT_NAME"
[ -x "$OCTO_EXTRACTED_ROOT/install.sh" ] || fail '安装载荷结构不完整。'
"$OCTO_EXTRACTED_ROOT/install.sh"

printf '\nOcto CLI %s 安装完成。\n' "$OCTO_RELEASE_VERSION"
printf '运行：octo provider login --method douyin --wait\n'
