#!/bin/bash
set -e

export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"
# ========================
# drpy-node 自动更新脚本
# ========================

#### 设置变量####

# 容器名称
CONTAINER_NAME="drpyS25"
# 后台登陆账号
AUTH_NAME="admin"
#后台登陆密码
AUTH_PWD="drpys"
#API密码
API_PWD="xxxx"
#自定义端口
port="9098"
# 安装路径
TARGET_DIR="/volume1/docker/drpy-node-main"
# drpys资源文件
GH_API="https://api.github.com/repos/hjdhnx/drpy-node/releases/latest"
# docker加速
proxy_docker="docker.1ms.run"
# 是否代理
proxy_list=("https://gh.llkk.cc" "https://ghproxy.net" "https://gitproxy.click" "https://github.tbedu.top" "https://ghfile.geekertao.top" "https://github.proxy.class3.fun" "https://ghf.无名氏.top" "https://ghm.078465.xyz" "https://gh-proxy.net" "https://jiashu.1win.eu.org" "https://j.1win.ggff.net" "https://j.1lin.dpdns.org" "https://gh-deno.mocn.top" "https://git.yylx.win" "https://tvv.tw" "https://gp-us.fyan.top" "https://gitproxy.127731.xyz" "https://github.cmsz.dpdns.org" "https://ghproxy.fangkuai.fun" "https://github.3x25.com" "https://ghproxy.vansour.top" "https://ghp.ml1.one" "https://x.whereisdoge.work" "https://y.whereisdoge.work" "https://gh.catmak.name" "https://hub.gitmirror.com" "https://github.dpik.top" "https://gh.dpik.top" "http://fast.qmwneb946.dpdns.org" "https://gh-proxy.com" "https://gh.b52m.cn" "https://gh.bugdey.us.kg" "https://gh.wsmdn.dpdns.org" "https://github.lxxz.xyz" "http://gh.927223.xyz")
# 旁路代理
Local_proxy="http://192.168.1.2:1085"
export http_proxy=$Local_proxy
export https_proxy=$Local_proxy
# 版本选择
Green=1  # 1=绿色版, 0=完整版

####检查容器####

# 检查是否存在同名容器
EXISTING_CONTAINER=$(docker ps -a -q -f name=$CONTAINER_NAME)
if [ -z "$EXISTING_CONTAINER" ]; then
	# 准备环境文件
cat > /tmp/.env <<EOF
	NODE_ENV=production

	#justaflag
	ENV='staging'

	LOG_WITH_FILE=1
	#trace/debug/info/warn/error/fatal
	LOG_LEVEL=info
	COOKIE_AUTH_CODE=drpys
	API_AUTH_NAME=${AUTH_NAME}
	API_AUTH_CODE=${AUTH_PWD}
	API_PWD=${API_PWD}
	EPG_URL=https://iptv.crestekk.cn/epgphp/index.php?ch={name}&date={date}
	LOGO_URL=https://live.mxdyeah.top/logo/{name}.png
	LIVE_URL=https://livetv.wqwqwq.sbs/tv.m3u
	MAX_TASK=8
EOF
	
	# 拉取容器
	# mypull eulac/my-drpys:latest
	# 安装容器，如未拉取则先拉取再安装
	docker create --name $CONTAINER_NAME -p $port:5757 --env-file /tmp/.env -v $TARGET_DIR:/drpy-node $proxy_docker/eulac/my-drpys:latest
else
	# 停止容器
	echo "🛑 停止容器 $CONTAINER_NAME ..."
	docker stop "$CONTAINER_NAME"
fi

####更新资源####

# 获取最新 release 的 .7z 下载地址
echo "🌐 正在获取最新发布的 .7z 文件..."

if [ "$Green" == "1" ]; then
    # 绿色版（包含 green）
    download_url=$(curl -s "$GH_API" | grep "browser_download_url" | grep "\.7z" | grep -i green | head -n 1 | cut -d '"' -f 4)
else
    # 完整版（排除 green）
    download_url=$(curl -s "$GH_API" | grep "browser_download_url" | grep "\.7z" | grep -vi green | head -n 1 | cut -d '"' -f 4)
fi

# 校验下载地址
if [[ -z "$download_url" ]]; then
    echo "❌ 未找到符合条件的 .7z 文件，操作终止。"
    exit 1
fi

# 创建临时目录
tmp_dir=$(mktemp -d)
cd "$tmp_dir" || exit 1

# 初始化
final_download_url=""

# 优先走旁路，其次走加速，不行就尝试直连

if [ -n "$Local_proxy" ] || [ "${#proxy_list[@]}" -eq 0 ]; then
    final_download_url="$download_url"
else
    for proxy in "${proxy_list[@]}"; do
        [[ "${proxy}" != */ ]] && proxy="${proxy}/"

        echo "尝试代理: $proxy"
        try_url="${proxy}${download_url}"

        if wget --spider -q "$try_url"; then
            echo "✅ 可用代理：$proxy"
            final_download_url="$try_url"
            break
        else
            echo "❌ 代理失败：$proxy"
        fi
    done

    if [ -z "$final_download_url" ]; then
        echo "⚠️ 所有代理均失败，使用原始地址"
        final_download_url="$download_url"
    fi
fi

echo "✅ 下载地址: $final_download_url"
echo "⬇️ 开始下载 release.7z ..."

wget -q --show-progress "$final_download_url" -O release.7z

# 清空并准备目标目录
echo "🧹 清空目标目录 $TARGET_DIR ..."
mkdir -p "$TARGET_DIR"
rm -rf "$TARGET_DIR"/*

# 解压文件
echo "📦 解压 release.7z 到 $TARGET_DIR ..."
7z x release.7z -o"$TARGET_DIR" -y

# 清理临时目录
cd / || exit 1
rm -rf "$tmp_dir"

####启动容器####
echo "🚀 启动容器 $CONTAINER_NAME ..."
docker start "$CONTAINER_NAME"
MAX_RETRIES=10 # 重试启动最大次数
SLEEP_SECONDS=3 # 重试启动间隔时间
attempt=1
while true; do
    running=$(docker ps --filter "name=$CONTAINER_NAME" --filter "status=running" --format "{{.Names}}")
    if [ "$running" == "$CONTAINER_NAME" ]; then
        echo "✅ 容器 $CONTAINER_NAME 已成功启动"
		echo "🎉 更新完成 ✅"
        break
    else
        echo "❌ 容器 $CONTAINER_NAME 尚未启动，等待 $SLEEP_SECONDS 秒后重试 ($attempt/$MAX_RETRIES)..."
        ((attempt++))
        if [ $attempt -gt $MAX_RETRIES ]; then
            echo "⚠️ 达到最大重试次数，启动失败"
            exit 1
        fi
        sleep $SLEEP_SECONDS
    fi
done


