#!/usr/bin/env bash
set -euo pipefail

red='\033[0;31m'; green='\033[0;32m'; blue='\033[0;34m'; yellow='\033[0;33m'; plain='\033[0m'
LOGD(){ echo -e "${yellow}[DEG] $* ${plain}"; }
LOGE(){ echo -e "${red}[ERR] $* ${plain}"; }
LOGI(){ echo -e "${green}[INF] $* ${plain}"; }

APP=tolato
MIRROR=${MIRROR:-https://ipan.mbvpn.cn/tolato}
INSTALL_CLIENT=1
INSTALL_AGENT=0

usage() {
    cat <<EOF
Usage: $(basename "$0") [options]

  -c, --client   仅安装客户端 tolato(默认)
  -a, --agent    同时安装 agent tolato-agent
  -h, --help     显示帮助

下载自镜像 ${MIRROR},可用环境变量 MIRROR 覆盖。
EOF
    exit 0
}

while [[ $# -gt 0 ]]; do
    case "$1" in
        -c|--client) INSTALL_CLIENT=1; INSTALL_AGENT=0; shift ;;
        -a|--agent)  INSTALL_AGENT=1; shift ;;
        -h|--help)   usage ;;
        *) LOGE "未知参数: $1"; usage ;;
    esac
done

OS=$(uname -s | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m)
case "$ARCH" in
    x86_64|amd64)  ARCH=amd64 ;;
    aarch64|arm64) ARCH=arm64 ;;
    *) LOGE "不支持的架构: $ARCH"; exit 1 ;;
esac
case "$OS" in
    linux|darwin) ;;
    *) LOGE "不支持的系统: $OS"; exit 1 ;;
esac

if [[ $EUID -eq 0 ]]; then
    DEST=/usr/local/bin
else
    DEST=~/.local/bin
    mkdir -p "$DEST"
fi
command -v curl >/dev/null 2>&1 || { LOGE "缺少 curl,请先安装"; exit 1; }

install_bin() {
    local name=$1
    local url="$MIRROR/${name}-${OS}-${ARCH}"
    local sha="$MIRROR/${name}-${OS}-${ARCH}.sha256"
    local tmp; tmp=$(mktemp -d)
    LOGI "下载 ${name} (${OS}-${ARCH}) -> ${url}"
    curl -fSL --progress-bar -o "$tmp/${name}" "$url"
    curl -fsSL -o "$tmp/${name}.sha256" "$sha" || true
    if [[ -s "$tmp/${name}.sha256" ]]; then
        local expect; expect=$(awk '{print $1}' "$tmp/${name}.sha256")
        local got; got=$(sha256sum "$tmp/${name}" | awk '{print $1}')
        if [[ "$expect" == "$got" ]]; then
            LOGI "sha256 校验通过"
        else
            LOGE "sha256 校验失败: expect=$expect got=$got"; rm -rf "$tmp"; exit 1
        fi
    else
        LOGD "跳过 sha256 校验(镜像无校验文件)"
    fi
    chmod +x "$tmp/${name}"
    mv -f "$tmp/${name}" "$DEST/${name}"
    rm -rf "$tmp"
    LOGI "已安装 ${name} -> $DEST/${name}"
}

if [[ $INSTALL_CLIENT -eq 1 ]]; then
    install_bin tolato
fi
if [[ $INSTALL_AGENT -eq 1 ]]; then
    install_bin tolato-agent
fi

LOGI "安装完成,使用方式:"
if [[ $INSTALL_CLIENT -eq 1 ]]; then
    echo "  $DEST/tolato auth login --url <服务器地址>"
    echo "  $DEST/tolato nodes list"
fi
if [[ $INSTALL_AGENT -eq 1 ]]; then
    echo "  $DEST/tolato-agent -server ws://<服务器>/ws/agent -token <注册令牌>"
fi
