#!/usr/bin/env bash
# BBRab v6 local edition installer — user platform + loopback control console.
set -euo pipefail

B='\033[1m'; G='\033[32m'; Y='\033[33m'; C='\033[36m'; R='\033[31m'; N='\033[0m'
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
INSTALL_DIR="${BBRAB_HOME:-$SCRIPT_DIR}"
VENV_DIR="$INSTALL_DIR/venv"
DATA_DIR="$INSTALL_DIR/data"
LOG_DIR="$INSTALL_DIR/logs"
BACKUP_DIR="$INSTALL_DIR/backups"
CONF_FILE="$INSTALL_DIR/.bbrab.env"
PORT="${BBRAB_PORT:-8775}"
HOST="127.0.0.1"

step(){ echo -e "\n${G}${B}▶ $1${N}"; }
ok(){ echo -e "  ${G}✓${N} $1"; }
warn(){ echo -e "  ${Y}⚠${N} $1"; }
fail(){ echo -e "  ${R}✗${N} $1" >&2; exit 1; }

echo -e "${C}${B}"
echo "  BBRab Platform v6 · 本地发行版"
echo "  用户平台与平台管理后台完全分离"
echo -e "${N}"

step "检查本机环境"
command -v python3 >/dev/null 2>&1 || fail "需要 Python 3.8 或更高版本"
PY_VERSION="$(python3 -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')"
PY_MAJOR="${PY_VERSION%%.*}"; PY_MINOR="${PY_VERSION#*.}"
if [ "$PY_MAJOR" -lt 3 ] || { [ "$PY_MAJOR" -eq 3 ] && [ "$PY_MINOR" -lt 8 ]; }; then
  fail "当前 Python $PY_VERSION，最低要求 3.8"
fi
ok "Python $PY_VERSION"

step "准备隔离运行环境"
mkdir -p "$DATA_DIR" "$LOG_DIR" "$BACKUP_DIR"
if [ ! -x "$VENV_DIR/bin/python3" ]; then
  python3 -m venv "$VENV_DIR"
fi
PYTHON="$VENV_DIR/bin/python3"
ok "本地运行环境已就绪"

step "写入本地版配置"
umask 077
{
  echo "# BBRab local edition"
  echo "BBRAB_LOCAL_EDITION=1"
  echo "BBRAB_VERSION=v6.20260821"
  echo "BBRAB_HOST=$HOST"
  echo "BBRAB_PORT=$PORT"
  echo "BBRAB_DB_PATH=$DATA_DIR/bbrab_platform.db"
  echo "BBRAB_LOG_DIR=$LOG_DIR"
  echo "BBRAB_BACKUP_DIR=$BACKUP_DIR"
  echo "BBRAB_SSL_ENABLED=0"
  echo "BBRAB_REMOTE_CONTROL_ENABLED=0"
  echo "BBRAB_REMOTE_RELAY_URL="
  echo "BBRAB_REMOTE_DEVICE_ID="
  echo "BBRAB_REMOTE_CONSOLE_URL="
  echo "BBRAB_LOCAL_AI_ENABLED=${BBRAB_LOCAL_AI_ENABLED:-0}"
  echo "BBRAB_LOCAL_AI_BASE_URL=${BBRAB_LOCAL_AI_BASE_URL:-http://127.0.0.1:11435/v1}"
  echo "BBRAB_LOCAL_AI_MODEL=${BBRAB_LOCAL_AI_MODEL:-bbrab-qwen3-4b-local}"
  echo "BBRAB_LOCAL_AI_CONTEXT_LENGTH=${BBRAB_LOCAL_AI_CONTEXT_LENGTH:-40960}"
} > "$CONF_FILE"
chmod 600 "$CONF_FILE"
ok "仅监听 $HOST:$PORT"

export BBRAB_LOCAL_EDITION=1
export BBRAB_VERSION=v6.20260821
export BBRAB_HOST="$HOST"
export BBRAB_PORT="$PORT"
export BBRAB_DB_PATH="$DATA_DIR/bbrab_platform.db"
export BBRAB_LOG_DIR="$LOG_DIR"
export BBRAB_BACKUP_DIR="$BACKUP_DIR"
export BBRAB_LOCAL_AI_ENABLED="${BBRAB_LOCAL_AI_ENABLED:-0}"
export BBRAB_LOCAL_AI_BASE_URL="${BBRAB_LOCAL_AI_BASE_URL:-http://127.0.0.1:11435/v1}"
export BBRAB_LOCAL_AI_MODEL="${BBRAB_LOCAL_AI_MODEL:-bbrab-qwen3-4b-local}"
export BBRAB_LOCAL_AI_CONTEXT_LENGTH="${BBRAB_LOCAL_AI_CONTEXT_LENGTH:-40960}"

step "初始化本地数据库"
cd "$INSTALL_DIR"
"$PYTHON" -B -c 'from bbrab_database import init_db, DB_PATH; init_db(DB_PATH)'
ok "数据库已就绪；未创建平台管理员账号"

step "检查可选联网依赖"
if "$PYTHON" -c 'import requests, alipay, Crypto' >/dev/null 2>&1; then
  ok "AI 上游与支付宝 AI 付组件已安装"
elif [ -f "$INSTALL_DIR/requirements.txt" ]; then
  warn "核心平台可离线运行；正在尝试安装 AI 上游与支付宝 AI 付组件"
  "$PYTHON" -m pip install -r "$INSTALL_DIR/requirements.txt" --quiet 2>/dev/null || warn "网络不可用，按量付费将在安装依赖后启用"
fi

step "启动本地服务"
chmod +x "$INSTALL_DIR/bbrabctl"
"$INSTALL_DIR/bbrabctl" start

echo ""
echo -e "${G}${B}安装完成${N}"
echo -e "  用户平台: ${C}http://127.0.0.1:$PORT/${N}"
echo -e "  远程控制台: ${C}http://127.0.0.1:$PORT/remote-console${N}"
echo ""
echo "  安全打开本机运维台:"
echo -e "  ${B}$INSTALL_DIR/bbrabctl console${N}"
echo ""
echo "  本地版不包含平台管理后台页面，相关路由与接口均返回 404。"
