#!/bin/bash
#
# SSH-Go Automatic Upgrade 客户端一键安装脚本
# 用法:
#   curl -fsSL -o install.sh https://download.liumou.site/ssh-go-automatic-upgrade/install.sh && sudo bash install.sh && rm -f install.sh
#   wget -O install.sh https://download.liumou.site/ssh-go-automatic-upgrade/install.sh && sudo bash install.sh && rm -f install.sh
#
set -e

BASE_URL="https://download.liumou.site/ssh-go-automatic-upgrade"
DEFAULT_SERVER_URL="https://demo.ssh.liumou.site"
DEFAULT_ROOT_LOGIN="auto"

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
NC='\033[0m'

# ========== 安装配置 ==========
INSTALL_DIR="/usr/local/bin"
BINARY_NAME="ssh-go-automatic-upgrade"
SERVICE_NAME="ssh-go-automatic-upgrade"
DOWNLOAD_PREFIX="${BINARY_NAME}"

detect_arch() {
    local arch
    arch=$(uname -m)
    case "$arch" in
        x86_64|amd64)  echo "amd64" ;;
        aarch64|arm64) echo "arm64" ;;
        armv7l|armv6l|arm) echo "arm" ;;
        mips64le)      echo "mips64le" ;;
        *)
            echo -e "${RED}不支持的架构: $arch${NC}"
            exit 1
            ;;
    esac
}

get_latest_version() {
    curl -fsSL "$BASE_URL/" 2>/dev/null \
        | grep -oP 'href="([^"]+)/index\.html"' \
        | head -1 \
        | grep -oP '"\K[^"/]+'
}

confirm() {
    local prompt="$1"
    local default="${2:-Y}"
    local yn
    if [ "$default" = "Y" ]; then
        prompt="$prompt [Y/n]: "
    else
        prompt="$prompt [y/N]: "
    fi
    read -r -p "$prompt" yn
    yn=${yn:-$default}
    case "$yn" in
        [Yy]*) return 0 ;;
        *) return 1 ;;
    esac
}

prompt_with_default() {
    local prompt="$1"
    local default="$2"
    local input
    read -r -p "$prompt [$default]: " input
    echo "${input:-$default}"
}

# ====== 主流程 ======

if [ "$(id -u)" -ne 0 ]; then
    echo -e "${YELLOW}提示: 建议使用 root 权限运行此脚本${NC}"
    if ! confirm "继续使用非 root 权限安装?" "N"; then
        echo "请使用 sudo bash install.sh 重新运行"
        exit 1
    fi
fi

echo -e "${CYAN}==============================================${NC}"
echo -e "${CYAN}  SSH-Go Automatic Upgrade 客户端安装脚本${NC}"
echo -e "${CYAN}==============================================${NC}"
echo ""

ARCH=$(detect_arch)
echo -e "检测到架构: ${GREEN}$ARCH${NC}"

LATEST_VERSION=$(get_latest_version)
if [ -z "$LATEST_VERSION" ]; then
    LATEST_VERSION="v2.5.12"
    echo -e "${YELLOW}无法获取最新版本，使用默认版本: $LATEST_VERSION${NC}"
else
    echo -e "最新版本: ${GREEN}$LATEST_VERSION${NC}"
fi
echo ""

echo -e "${YELLOW}请输入配置信息（直接回车使用默认值）:${NC}"
SERVER_URL=$(prompt_with_default "API 服务端地址" "$DEFAULT_SERVER_URL")
ROOT_LOGIN=$(prompt_with_default "Root 登录配置 (auto/yes/no)" "$DEFAULT_ROOT_LOGIN")
confirm "启用状态上报" "Y" && ENABLE_REPORT="Y" || ENABLE_REPORT="N"
confirm "注册为系统服务" "Y" && REGISTER_SERVICE="Y" || REGISTER_SERVICE="N"
echo -e "${YELLOW}API Key（可选，直接回车跳过）:${NC}"
read -r API_KEY
echo ""

echo -e "${CYAN}==============================================${NC}"
echo -e "  架构:    ${GREEN}$ARCH${NC}"
echo -e "  版本:    ${GREEN}$LATEST_VERSION${NC}"
echo -e "  服务端:  ${GREEN}$SERVER_URL${NC}"
echo -e "  Root:    ${GREEN}$ROOT_LOGIN${NC}"
echo -e "  上报:    ${GREEN}$ENABLE_REPORT${NC}"
echo -e "  系统服务: ${GREEN}$REGISTER_SERVICE${NC}"
if [ -n "$API_KEY" ]; then
    echo -e "  API Key: ${GREEN}已设置${NC}"
else
    echo -e "  API Key: ${YELLOW}未设置${NC}"
fi
echo -e "  安装路径: ${GREEN}${INSTALL_DIR}/${BINARY_NAME}${NC}"
echo -e "  服务名:   ${GREEN}${SERVICE_NAME}${NC}"
echo -e "${CYAN}==============================================${NC}"

echo ""
echo -e "${YELLOW}以上为本次安装配置，确认安装？(y/n)${NC}"
read -r confirm_input
if [ "$confirm_input" != "y" ] && [ "$confirm_input" != "Y" ]; then
    echo "安装已取消"
    exit 0
fi

DOWNLOAD_URL="$BASE_URL/$LATEST_VERSION/${DOWNLOAD_PREFIX}_${LATEST_VERSION}-linux-${ARCH}.tar.gz"
echo ""
echo -e "下载: ${CYAN}$DOWNLOAD_URL${NC}"

TMP_DIR=$(mktemp -d)
trap 'rm -rf "$TMP_DIR"' EXIT

curl -fsSL "$DOWNLOAD_URL" -o "$TMP_DIR/ssh-upgrade.tar.gz"
echo -e "${GREEN}下载完成${NC}"

tar -xzf "$TMP_DIR/ssh-upgrade.tar.gz" -C "$TMP_DIR"
BINARY_PATH=$(find "$TMP_DIR" -maxdepth 1 -name "${DOWNLOAD_PREFIX}_*" -type f | head -1)
if [ -z "$BINARY_PATH" ]; then
    echo -e "${RED}错误: 解压后未找到二进制文件${NC}"
    exit 1
fi
chmod +x "$BINARY_PATH"
echo -e "${GREEN}解压完成${NC}"

ARGS=""
if [ -n "$API_KEY" ]; then
    ARGS="$ARGS -api-key $API_KEY"
fi
if [ "$ENABLE_REPORT" = "Y" ]; then
    ARGS="$ARGS -report"
fi
ARGS="$ARGS -server-url $SERVER_URL"
ARGS="$ARGS -rl $ROOT_LOGIN"

if [ "$REGISTER_SERVICE" = "Y" ]; then
    echo ""
    echo -e "注册 systemd 服务..."
    "$BINARY_PATH" -su $ARGS
    echo -e "${GREEN}服务注册完成${NC}"
fi

echo ""
echo -e "${GREEN}==============================================${NC}"
echo -e "${GREEN}  SSH-Go Automatic Upgrade 安装完成!${NC}"
echo -e "${GREEN}==============================================${NC}"
