#!/usr/bin/env bash

set -Eeuo pipefail

REPO_URL="https://github.com/CoderLambert/ai-parallel.git"
BASE_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/ai-parallel"
REPO_DIR="$BASE_DIR/repo"
EXT_DIR="$BASE_DIR/browser-extension"

log() { printf '\033[1;34m[ai-parallel]\033[0m %s\n' "$*"; }
ok() { printf '\033[1;32m[✓]\033[0m %s\n' "$*"; }
fail() { printf '\033[1;31m[✗]\033[0m %s\n' "$*" >&2; exit 1; }

command -v git >/dev/null || fail "未找到 git"
command -v node >/dev/null || fail "未找到 node"
command -v npm >/dev/null || fail "未找到 npm"
command -v rsync >/dev/null || fail "未找到 rsync"

mkdir -p "$BASE_DIR"

if [[ ! -d "$REPO_DIR/.git" ]]; then
  log "首次安装，克隆仓库..."
  git clone "$REPO_URL" "$REPO_DIR"
else
  log "检查 GitHub Release..."
  if [[ -n "$(git -C "$REPO_DIR" status --porcelain)" ]]; then
    fail "同步缓存存在未提交修改：$REPO_DIR"
  fi
fi

git -C "$REPO_DIR" fetch origin --tags --prune
LATEST_TAG="$(git -C "$REPO_DIR" tag --list 'v*' --sort=-v:refname | sed -n '1p')"
[[ -n "$LATEST_TAG" ]] || fail "仓库中尚无可用的版本标签"
git -C "$REPO_DIR" checkout --detach "$LATEST_TAG"
ok "使用最新 Release：$LATEST_TAG"

log "执行代码检查..."
(cd "$REPO_DIR" && npm run check && npm test)
ok "代码检查通过"

MANIFEST="$REPO_DIR/apps/browser-extension/manifest.json"
[[ -f "$MANIFEST" ]] || fail "找不到 manifest.json"
VERSION="$(node -p "require('$MANIFEST').version")"

log "同步浏览器扩展..."
mkdir -p "$EXT_DIR"
rsync -a --delete --exclude='node_modules' "$REPO_DIR/apps/browser-extension/" "$EXT_DIR/"

COMMIT="$(git -C "$REPO_DIR" rev-parse --short HEAD)"
ok "已同步 AI Parallel v$VERSION ($LATEST_TAG, $COMMIT)"
printf '\n扩展目录：%s\n' "$EXT_DIR"
printf '请在 chrome://extensions/ 或 edge://extensions/ 点击「重新加载」。\n'
