#!/bin/bash

# Armbian 自动安装 Koishi 脚本
# 功能：自动安装 Node.js + Koishi + 配置系统服务
# 使用方法：chmod +x install_koishi.sh && sudo ./install_koishi.sh

KOISHI_USER="koishi"         # 运行服务的用户
KOISHI_DIR="/opt/koishi"     # 安装目录
KOISHI_PORT=5140             # Koishi 默认控制台端口

# 检查 root 权限
if [ "$(id -u)" -ne 0 ]; then
    echo "请使用 sudo 或 root 用户运行此脚本"
    exit 1
fi

# 安装 Node.js 和 npm
install_nodejs() {
    echo "[1/6] 正在安装 Node.js..."
    curl -fsSL https://deb.nodesource.com/setup_18.x | bash -
    apt-get install -y nodejs
}

# 创建专用用户
create_user() {
    echo "[2/6] 正在创建专用用户..."
    if ! id "$KOISHI_USER" &>/dev/null; then
        useradd -r -m -d "$KOISHI_DIR" -s /bin/bash "$KOISHI_USER"
    fi
}

# 安装 Koishi
install_koishi() {
    echo "[3/6] 正在安装 Koishi..."
    npm install -g koishi-cli yarn

    sudo -u "$KOISHI_USER" sh -c "mkdir -p '$KOISHI_DIR' && cd '$KOISHI_DIR' && koishi init ."
}

# 安装依赖
install_dependencies() {
    echo "[4/6] 正在安装依赖..."
    cd "$KOISHI_DIR"
    sudo -u "$KOISHI_USER" npm install
}

# 创建系统服务
create_service() {
    echo "[5/6] 正在创建系统服务..."
    cat > /etc/systemd/system/koishi.service <<EOF
[Unit]
Description=Koishi Chatbot Service
After=network.target

[Service]
User=$KOISHI_USER
WorkingDirectory=$KOISHI_DIR
ExecStart=$(which npm) start
Restart=always
Environment=NODE_ENV=production
Environment=PORT=$KOISHI_PORT

[Install]
WantedBy=multi-user.target
EOF

    systemctl daemon-reload
    systemctl enable koishi
    systemctl start koishi
}

# 显示安装结果
show_result() {
    echo "[6/6] 安装完成！"
    echo "----------------------------------------"
    echo "控制台访问: http://$(hostname -I | awk '{print $1}'):$KOISHI_PORT"
    echo "服务管理命令:"
    echo "  sudo systemctl status koishi"
    echo "  sudo systemctl restart koishi"
    echo "安装目录: $KOISHI_DIR"
    echo "----------------------------------------"
}

# 主安装流程
main() {
    apt-get update
    install_nodejs
    create_user
    install_koishi
    install_dependencies
    create_service
    show_result
}

main