#!/bin/bash
set -e

# === 配置参数 ===
FRPS_ADDR="lxiaodong.eu.org"
FRPS_PORT=7123
AUTH_TOKEN="Dong200206"
SERVER_ADDR="lxiaodong.eu.org"
SERVER_PORT=8888

# === 定义颜色 ===
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
NC='\033[0m'

CLIENT_ID_FILE="/etc/frp/client_id"

if [ "$(id -u)" != "0" ]; then
   echo -e "${RED}[ERROR] 需要 root 权限运行${NC}"
   exit 1
fi

# === 获取 client_id ===
if [ -f "$CLIENT_ID_FILE" ]; then
    CLIENT_ID=$(cat "$CLIENT_ID_FILE")
    echo -e "${BLUE}[INFO] 使用本地 client_id: $CLIENT_ID${NC}"
    RESPONSE=$(curl -s "http://$SERVER_ADDR:$SERVER_PORT/get_port?token=$AUTH_TOKEN&client_id=$CLIENT_ID")
else
    echo -e "${BLUE}[INFO] 本地没有 client_id，正在获取...${NC}"
    RESPONSE=$(curl -s "http://$SERVER_ADDR:$SERVER_PORT/get_port?token=$AUTH_TOKEN")
    CLIENT_ID=$(echo "$RESPONSE" | sed -n 's/.*"client_id":"\([^"]*\)".*/\1/p')
    if [ -z "$CLIENT_ID" ]; then
        ERR=$(echo "$RESPONSE" | grep -oP '(?<="error":")[^"]*')
        echo -e "${RED}[ERROR] 无法获取 client_id: $ERR${NC}"
        exit 1
    fi
    mkdir -p /etc/frp
    echo "$CLIENT_ID" > "$CLIENT_ID_FILE"
    echo -e "${GREEN}[SUCCESS] 获取并保存 client_id: $CLIENT_ID${NC}"
fi

# === 获取端口和剩余端口 ===
PORT=$(echo "$RESPONSE" | sed -n 's/.*"port":\([0-9]*\).*/\1/p')
AVAILABLE=$(echo "$RESPONSE" | grep -oP '(?<="available_ports":\[)[^\]]*')
if [ -z "$PORT" ]; then
    echo -e "${RED}[ERROR] 无法获取端口${NC}"
    exit 1
fi
echo -e "${BLUE}[INFO] 分配到端口: $PORT${NC}"
echo -e "${BLUE}[INFO] 剩余可用端口: $AVAILABLE${NC}"

# === 下载 frpc ===
FRP_VERSION="0.64.0"
ARCH=$(uname -m)
if [[ "$ARCH" == "x86_64" ]]; then FRP_ARCH="amd64"
elif [[ "$ARCH" == "aarch64" ]]; then FRP_ARCH="arm64"
else echo -e "${RED}[ERROR] 不支持架构 $ARCH${NC}"; exit 1; fi

echo -e "${BLUE}[INFO] 下载 frpc v$FRP_VERSION...${NC}"
wget -qO /tmp/frp.tar.gz "http://$FRPS_ADDR:8002/frp/frp_${FRP_VERSION}_linux_${FRP_ARCH}.tar.gz"
tar -xzf /tmp/frp.tar.gz -C /tmp
mv /tmp/frp_${FRP_VERSION}_linux_${FRP_ARCH}/frpc /usr/local/bin/
chmod +x /usr/local/bin/frpc
rm -rf /tmp/frp*

# === 配置文件 ===
mkdir -p /etc/frp
cat <<EOF | tee /etc/frp/frpc.toml
serverAddr = "$FRPS_ADDR"
serverPort = $FRPS_PORT
auth.method = "token"
auth.token = "$AUTH_TOKEN"

[[proxies]]
name = "pve_$PORT"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8006
remotePort = $PORT
EOF

# === systemd 服务 ===
cat <<EOF | tee /etc/systemd/system/frpc.service
[Unit]
Description=FRP Client Service
After=network.target

[Service]
ExecStart=/usr/local/bin/frpc -c /etc/frp/frpc.toml
Restart=always
User=nobody
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reexec
systemctl enable frpc
systemctl restart frpc

echo -e "${GREEN}[SUCCESS] frpc 已安装并启动${NC}"
echo -e "${BLUE}访问地址: http://$FRPS_ADDR:$PORT${NC}"