#!/bin/bash

# --------------------------
# 全自动 Reality 指纹抓取 + soga 配置脚本（支持 Debian / CentOS / Alpine）
# --------------------------

# --------------------------
# 检查 dig 是否存在
# --------------------------
if ! command -v dig >/dev/null 2>&1; then
    echo "[INFO] dig 命令未安装，正在安装..."
    
    # 判断系统类型
    if [ -f /etc/debian_version ]; then
        sudo apt update
        sudo apt install -y dnsutils
    elif [ -f /etc/redhat-release ]; then
        sudo yum install -y bind-utils
    elif [ -f /etc/alpine-release ]; then
        sudo apk update
        sudo apk add bind-tools
    else
        echo "[WARN] 未知系统类型，请手动安装 dig"
    fi
    
    if command -v dig >/dev/null 2>&1; then
        echo "[INFO] dig 安装成功"
    else
        echo "[ERROR] dig 安装失败，请手动安装"
        exit 1
    fi
else
    echo "[INFO] dig 命令已存在，无需安装"
fi

SCRIPT_URL="https://sh.digac.icu/shell/auto_reality_fingerprint.sh"
FP_SCRIPT="/usr/local/bin/auto_reality_fp"
CONFIG_PATH="/etc/soga/soga.conf"
BACKUP_DIR="/etc/soga"

# 1️⃣ 下载指纹抓取脚本
echo "[INFO] 正在下载 Reality 指纹抓取脚本..."
curl -fsSL "$SCRIPT_URL" -o "$FP_SCRIPT"
if [ $? -ne 0 ]; then
    echo "[ERROR] 下载失败，请检查 URL 是否正确"
    exit 1
fi
chmod +x "$FP_SCRIPT"
echo "[INFO] 指纹抓取脚本已保存到 $FP_SCRIPT"

# 2️⃣ 首次抓取指纹
echo "[INFO] 正在抓取 Reality 指纹..."
"$FP_SCRIPT"
echo "[INFO] 指纹抓取完成，日志保存在 /var/log/auto_reality_fp.log"

LOG_DIR="/var/log"
LOG_PREFIX="auto_reality_fp.log"

if [ -d "$LOG_DIR" ]; then
    ls -1t $LOG_DIR/$LOG_PREFIX* 2>/dev/null | tail -n +6 | xargs -r rm -f
    echo "[INFO] 指纹抓取日志清理完成，只保留最近 5 个"
fi

# --------------------------
# 检查 crontab 是否已有任务
if ! crontab -l 2>/dev/null | grep -q "$FP_SCRIPT"; then
    (crontab -l 2>/dev/null; echo "0 * * * * $FP_SCRIPT >/dev/null 2>&1") | crontab -
    echo "[INFO] 已添加到 crontab，每小时自动抓取一次指纹"
else
    echo "[INFO] crontab 已存在抓指纹任务，无需重复添加"
fi

# 设置时区为上海
echo "👉 设置时区为 Asia/Shanghai"
if command -v timedatectl >/dev/null 2>&1; then
    timedatectl set-timezone Asia/Shanghai
else
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
fi

# 同步时间
echo "👉 正在同步时间..."
if command -v ntpdate >/dev/null 2>&1; then
    ntpdate -u ntp.aliyun.com >/dev/null 2>&1 && echo "✅ 时间已同步（使用 ntpdate）" || echo "⚠️ ntpdate 同步失败"
else
    if [ -f /etc/alpine-release ]; then
        echo "[INFO] 使用 openntpd 同步时间"
        apk add --no-cache openntpd
        rc-service ntpd stop 2>/dev/null
        ntpd -d -n -q -p ntp.aliyun.com
    else
        echo "⚠️ ntpdate 未安装，尝试使用 chrony"
        if ! command -v chronyc >/dev/null 2>&1; then
            if [ -f /etc/debian_version ]; then
                apt install -y chrony
            elif [ -f /etc/redhat-release ]; then
                yum install -y chrony
            elif [ -f /etc/alpine-release ]; then
                apk add chrony
            fi
        fi
        if command -v systemctl >/dev/null 2>&1; then
            systemctl restart chronyd
        elif command -v rc-service >/dev/null 2>&1; then
            rc-service chronyd restart
        fi
        chronyc -a makestep
        echo "✅ 时间已同步（使用 chronyd）"
    fi
fi

echo "🕒 当前系统时间：$(date)"
echo "----------------------------------------"

# 3️⃣ 配置 soga
read -p "请输入 node_id: " node_id

# ---- 新增 webapi 输入逻辑 ----
read -p "请输入 webapi_url (默认: http://xapi.reality.pp.ua): " webapi_url
webapi_url=${webapi_url:-http://xapi.reality.pp.ua}

read -p "请输入 webapi_key (默认: michaeltan057720): " webapi_key
webapi_key=${webapi_key:-michaeltan057720}
# ---------------------------------

BACKUP_PATH="$BACKUP_DIR/soga.conf.bak.$(date +%Y%m%d%H%M%S)"

# 备份原配置
if [ -f "$CONFIG_PATH" ]; then
    cp "$CONFIG_PATH" "$BACKUP_PATH"
    echo "[INFO] 备份原 soga.conf 到 $BACKUP_PATH"
fi

# 写入新配置
sudo tee "$CONFIG_PATH" > /dev/null <<EOF
type=xboard
server_type=vless
node_id=$node_id

api=webapi
webapi_url=$webapi_url
webapi_key=$webapi_key

db_host=
db_port=
db_name=
db_user=
db_password=

user_conn_limit=0
user_speed_limit=0
check_interval=100

force_close_ssl=true
forbidden_bit_torrent=true

default_dns=1.1.1.1,1.0.0.1,8.8.8.8,8.8.4.4,9.9.9.9,149.112.112.112,223.5.5.5,223.6.6.6,119.29.29.29,182.254.116.116
EOF

echo "[INFO] 新 soga.conf 已写入 $CONFIG_PATH"

# 4️⃣ 自动重启 soga
echo "[INFO] 尝试重启 soga 服务..."
if command -v systemctl >/dev/null 2>&1; then
    systemctl restart soga && echo "🔄 soga 服务已重启"
elif command -v rc-service >/dev/null 2>&1; then
    rc-service soga restart && echo "🔄 soga 服务已重启"
else
    if pgrep -x soga >/dev/null; then
        pkill -9 soga
    fi
    nohup soga >/dev/null 2>&1 &
    echo "🔄 soga 已手动重启（后台运行）"
fi

echo "[SUCCESS] 全流程完成！"
