#!/bin/bash

# ==========================================
# ▒▒ Rsync 同步工具 (自动跳过Key确认 + 强制安装版)
# ==========================================

LOCAL_FILE="cloudata.sh"
REMOTE_URL="cloudata.eu.org"
SHORTCUT_NAME="c"

# --- 1. 环境准备 ---
if [ ! -f "$LOCAL_FILE" ]; then
    curl -sL "$REMOTE_URL" -o "$LOCAL_FILE" && chmod +x "$LOCAL_FILE"
fi
if ! command -v "$SHORTCUT_NAME" &> /dev/null && [ -w "/usr/local/bin" ]; then
    ln -sf "$(pwd)/$LOCAL_FILE" "/usr/local/bin/$SHORTCUT_NAME"
fi

# --- 2. 交互逻辑 ---
echo "=============================="
echo " ▒▒ Rsync 文件同步工具"
echo "=============================="

read -e -p "请输入源路径 (支持Tab补全): " SRC_PATH
SRC_PATH=$(echo "$SRC_PATH" | xargs)

if [ -z "$SRC_PATH" ] || [ ! -e "$SRC_PATH" ]; then
    echo "❌ 路径无效" ; exit 1
fi

read -p "请输入目标主机 IP: " DEST_HOST
if [ -z "$DEST_HOST" ]; then echo "❌ IP不能为空"; exit 1; fi

read -p "请输入目标用户名 (默认 root): " DEST_USER
DEST_USER=${DEST_USER:-root}

read -e -p "请输入目标目录 (默认 /root): " DEST_DIR
DEST_DIR=${DEST_DIR:-/root}

read -p "请输入 SSH 端口 (默认 22): " SSH_PORT
SSH_PORT=${SSH_PORT:-22}

# 创建一个临时文件夹存放连接套接字
mkdir -p ~/.ssh/sockets


# 定义通用的 SSH 参数：跳过主机 Key 检查，防止交互干扰
# SSH_OPTS="-p ${SSH_PORT} -o ConnectTimeout=10 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
# 增强版的 SSH 参数
SSH_OPTS="-p ${SSH_PORT} \
    -o StrictHostKeyChecking=no \
    -o UserKnownHostsFile=/dev/null \
    -o ControlMaster=auto \
    -o ControlPath=~/.ssh/sockets/%r@%h:%p \
    -o ControlPersist=60"

# --- 3. 远程检查与安装 ---
echo -e "\n 检查远程主机是否具备同步条件..."

# 核心修改：直接测试 rsync 命令，不依赖变量赋值
if ! ssh ${SSH_OPTS} "${DEST_USER}@${DEST_HOST}" "rsync --version" &> /dev/null; then
    echo "⚠️  远程主机缺失 rsync，尝试自动安装..."
    
    # 使用 ssh -t 强制分配终端，确保安装命令能执行
    ssh -t ${SSH_OPTS} "${DEST_USER}@${DEST_HOST}" "
        if command -v apt-get &>/dev/null; then
            apt-get update && apt-get install -y rsync
        elif command -v yum &>/dev/null; then
            yum install -y rsync
        elif command -v dnf &>/dev/null; then
            dnf install -y rsync
        elif command -v apk &>/dev/null; then
            apk add rsync
        else
            echo '❌ 无法识别包管理器'; exit 1
        fi
    "
    
    if [ $? -ne 0 ]; then
        echo "❌ 自动安装失败，请手动登录目标机执行安装命令。"
        exit 1
    fi
    echo "✅ 远程 rsync 安装成功！"
fi

# --- 4. 执行同步 ---
echo -e "\n 准备同步..."
echo "--------------------------------------"
echo "源   路径: $SRC_PATH"
echo "目 标 端: $DEST_USER@$DEST_HOST:$DEST_DIR"
echo "--------------------------------------"

# 执行同步
rsync -avzhP --delete \
    -e "ssh ${SSH_OPTS}" \
    --exclude ".git/" \
    "${SRC_PATH}" "${DEST_USER}@${DEST_HOST}:${DEST_DIR}"

if [ $? -eq 0 ]; then
    echo -e "\n✅ 同步完成！"
else
    echo -e "\n❌ 同步失败，请检查网络或密码。"
fi