#!/bin/bash

# OpenClaw 一键部署脚本 (OpenCloudOS 适配版)

set -e # 遇到错误立即退出

# --- 参数解析 ---
# 用法:
#   ./deploy_opneclaw.sh                        # 默认安装全部插件
#   ./deploy_opneclaw.sh --skip-plugins          # 跳过所有插件安装
#   ./deploy_opneclaw.sh --plugins wecom,qq      # 只安装企业微信和QQ插件
#   可选插件名: wecom, qq, feishu, dingtalk
SKIP_PLUGINS=false
INSTALL_PLUGINS=()
AVAILABLE_PLUGINS=("wecom" "qq" "feishu" "dingtalk")

while [[ $# -gt 0 ]]; do
    case "$1" in
        --skip-plugins)
            SKIP_PLUGINS=true
            shift
            ;;
        --plugins)
            if [[ -z "$2" || "$2" == --* ]]; then
                echo "错误: --plugins 需要指定插件名，可选: ${AVAILABLE_PLUGINS[*]}"
                exit 1
            fi
            OLD_IFS="$IFS"
            IFS=','
            for item in $2; do
                INSTALL_PLUGINS+=("$item")
            done
            IFS="$OLD_IFS"
            for p in "${INSTALL_PLUGINS[@]}"; do
                valid=false
                for ap in "${AVAILABLE_PLUGINS[@]}"; do
                    [[ "$p" == "$ap" ]] && valid=true && break
                done
                if [[ "$valid" == false ]]; then
                    echo "错误: 未知插件 '$p'，可选: ${AVAILABLE_PLUGINS[*]}"
                    exit 1
                fi
            done
            shift 2
            ;;
        -h|--help)
            echo "用法: $0 [选项]"
            echo ""
            echo "选项:"
            echo "  --skip-plugins          跳过所有插件安装"
            echo "  --plugins <name,...>     只安装指定插件 (逗号分隔)"
            echo "                          可选: wecom, qq, feishu, dingtalk"
            echo "  -h, --help              显示帮助信息"
            exit 0
            ;;
        *)
            echo "未知参数: $1 (使用 -h 查看帮助)"
            exit 1
            ;;
    esac
done

# 判断是否需要安装某个插件
should_install_plugin() {
    local plugin_name="$1"
    [[ "$SKIP_PLUGINS" == true ]] && return 1
    [[ ${#INSTALL_PLUGINS[@]} -eq 0 ]] && return 0
    local p
    for p in "${INSTALL_PLUGINS[@]}"; do
        [[ "$p" == "$plugin_name" ]] && return 0
    done
    return 1
}

# 临时目录清理：脚本异常退出时自动删除临时文件
TMP_DIRS_TO_CLEAN=()
cleanup() {
    for dir in "${TMP_DIRS_TO_CLEAN[@]}"; do
        [ -d "$dir" ] && rm -rf "$dir"
    done
}
trap cleanup EXIT

echo "=========================================="
echo "   OpenClaw 一键部署脚本 "
echo "=========================================="

# 检查 curl 是否安装
if ! command -v curl &> /dev/null; then
    echo "未检测到 curl，正在尝试安装..."
    if command -v dnf &> /dev/null; then
        sudo dnf install -y curl
    elif command -v yum &> /dev/null; then
        sudo yum install -y curl
    else
        echo "警告: 无法自动安装 curl，请手动安装后重试。"
        exit 1
    fi
fi

# 检查 git 是否安装
if ! command -v git &> /dev/null; then
    echo "未检测到 git，正在尝试安装..."
    if command -v dnf &> /dev/null; then
        sudo dnf install -y git
    elif command -v yum &> /dev/null; then
        sudo yum install -y git
    else
        echo "警告: 无法自动安装 git，请手动安装后重试。"
        exit 1
    fi
fi

# --- 安装 Node.js ---
echo ""
echo ">>> 检查 Node.js 环境..."

# 检查是否已安装 Node.js 且版本 >= 22
SKIP_NODE_INSTALL=false
if command -v node &> /dev/null; then
    CURRENT_NODE_VER=$(node -v | sed 's/v//' | cut -d'.' -f1)
    if [ "$CURRENT_NODE_VER" -ge 22 ] 2>/dev/null; then
        echo "检测到 Node.js v$CURRENT_NODE_VER 已安装 (>= 22)，跳过安装。"
        SKIP_NODE_INSTALL=true
    else
        echo "当前 Node.js 版本 v$CURRENT_NODE_VER 低于 22，将进行升级..."
    fi
fi

if [ "$SKIP_NODE_INSTALL" = false ]; then
    echo ">>> 正在安装 Node.js 环境..."

    # 检查 NVM 是否已安装
    if [ -d "$HOME/.nvm" ]; then
        echo "检测到 NVM 已安装，跳过 NVM 安装步骤。"
    else
        echo "正在安装 NVM..."
        # 尝试使用官方脚本安装
        curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
    fi

    # 加载 NVM 环境 (确保在当前脚本中可用)
    export NVM_DIR="$HOME/.nvm"
    [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
    [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

    if ! command -v nvm &> /dev/null; then
        echo "错误: NVM 加载失败，请检查安装日志。"
        exit 1
    fi

    echo "正在安装 Node.js v24..."
    nvm install 24
    nvm use 24
    nvm alias default 24
fi

# 验证版本
NODE_VER=$(node -v)
NPM_VER=$(npm -v)
echo "Node.js 版本: $NODE_VER"
echo "npm 版本: $NPM_VER"

# --- 安装 OpenClaw ---
echo ""
echo ">>> 正在安装 OpenClaw..."

# 配置 git 加速 (针对 OpenCloudOS/国内环境优化)
# 使用 ghfast.top 加速 GitHub HTTPS 访问
# 先保存原始配置，安装完后还原
GIT_INSTEADOF_KEY='url."https://ghfast.top/https://github.com/".insteadOf'
GIT_ORIGINAL_INSTEADOF=$(git config --global --get "$GIT_INSTEADOF_KEY" 2>/dev/null || echo "")
echo "配置 Git 使用 HTTPS 加速代理 (ghfast.top)..."
git config --global "$GIT_INSTEADOF_KEY" ssh://git@github.com/

# 安装 OpenClaw
echo "通过 npm 全局安装 OpenClaw (已屏蔽非必要警告)..."
npm install -g openclaw --loglevel error

# 验证安装
if command -v openclaw &> /dev/null; then
    echo "OpenClaw 安装成功！"
    openclaw --version
else
    echo "错误: OpenClaw 安装失败。"
    exit 1
fi

# --- 安装插件 ---
if [[ "$SKIP_PLUGINS" == true ]]; then
    echo ""
    echo ">>> 已跳过所有插件安装 (--skip-plugins)"
elif [[ ${#INSTALL_PLUGINS[@]} -gt 0 ]]; then
    echo ""
    echo ">>> 将安装指定插件: ${INSTALL_PLUGINS[*]}"
else
    echo ""
    echo ">>> 正在安装全部插件..."
fi

# 安装企业微信插件
if should_install_plugin "wecom"; then
    echo "正在安装企业微信插件..."
    if ! openclaw plugins install @marshulll/openclaw-wecom; then
        echo "警告: 企业微信插件安装失败，请稍后手动安装: openclaw plugins install @marshulll/openclaw-wecom"
    fi
fi

# 安装QQ相关插件
if should_install_plugin "qq"; then
    echo "正在安装QQ插件..."
    if ! openclaw plugins install https://github.com/sliverp/qqbot.git 2>/dev/null; then
        echo "GitHub 直连失败，尝试使用加速链接..."
        QQBOT_TMP_DIR=$(mktemp -d)
        TMP_DIRS_TO_CLEAN+=("$QQBOT_TMP_DIR")
        git clone https://ghfast.top/https://github.com/sliverp/qqbot.git "$QQBOT_TMP_DIR"
        openclaw plugins install "$QQBOT_TMP_DIR"
        rm -rf "$QQBOT_TMP_DIR"
    fi
    echo "QQ 插件安装完成。"
fi

# 安装飞书插件
if should_install_plugin "feishu"; then
    echo "正在安装飞书插件..."
    if ! openclaw plugins install @m1heng-clawd/feishu; then
        echo "警告: 飞书插件安装失败，请稍后手动安装: openclaw plugins install @m1heng-clawd/feishu"
    fi
fi

# 安装钉钉插件
if should_install_plugin "dingtalk"; then
    echo "正在安装钉钉插件..."
    if ! openclaw plugins install https://github.com/soimy/clawdbot-channel-dingtalk.git 2>/dev/null; then
        echo "GitHub 直连失败，尝试使用加速链接..."
        DINGTALK_TMP_DIR=$(mktemp -d)
        TMP_DIRS_TO_CLEAN+=("$DINGTALK_TMP_DIR")
        git clone https://ghfast.top/https://github.com/soimy/clawdbot-channel-dingtalk.git "$DINGTALK_TMP_DIR"
        openclaw plugins install "$DINGTALK_TMP_DIR"
        rm -rf "$DINGTALK_TMP_DIR"
    fi
    echo "钉钉插件安装完成。"
fi


# 还原 git 加速配置
echo "还原 Git 代理配置..."
if [[ -n "$GIT_ORIGINAL_INSTEADOF" ]]; then
    git config --global "$GIT_INSTEADOF_KEY" "$GIT_ORIGINAL_INSTEADOF"
else
    git config --global --unset "$GIT_INSTEADOF_KEY" || true
fi

# --- 交互式初始化 ---
echo ""
echo "=========================================="
echo "   安装完成！"
echo "=========================================="
echo ""
echo "请运行以下命令完成初始化配置:"
echo ""
echo "    openclaw onboard"
echo ""
