#!/bin/bash

# --- 动态 IP 检测配置 ---
LAN_IP="192.168.101.171:5000"
TS_IP="100.124.189.29:5000"

# 检测函数：判断端口是否连通 (超时时间 2 秒)
# nc -z 表示扫描模式，不发送数据
if nc -z -w 2 192.168.101.171 5000 > /dev/null 2>&1; then
    REGISTRY_URL=$LAN_IP
    echo "检测到局域网环境，使用内网 IP: $REGISTRY_URL"
else
    REGISTRY_URL=$TS_IP
    echo "无法连通局域网 IP，切换至 Tailscale IP: $REGISTRY_URL"
fi

# --- 以下为原有的同步逻辑 ---
AUTH="" # 如果有认证，例如 "-u user:pass"

echo "--- 正在连接私有仓库 $REGISTRY_URL ---"

# 1. 获取所有仓库列表
REPOS=$(curl -s $AUTH http://$REGISTRY_URL/v2/_catalog | jq -r '.repositories[]')

if [ -z "$REPOS" ]; then
    echo "[ERROR] 无法从 $REGISTRY_URL 获取仓库列表，请检查网络。"
    exit 1
fi

for REPO in $REPOS; do
    # 2. 获取该仓库下的所有标签
    TAGS=$(curl -s $AUTH http://$REGISTRY_URL/v2/$REPO/tags/list | jq -r '.tags[]')
    
    if [ "$TAGS" == "null" ]; then continue; fi

    for TAG in $TAGS; do
        REMOTE_IMAGE="$REGISTRY_URL/$REPO:$TAG"
        LOCAL_IMAGE="$REPO:$TAG"
        
        # 3. 判断本地是否已经存在重命名后的镜像
        if docker image inspect "$LOCAL_IMAGE" >/dev/null 2>&1; then
            echo "[SKIP] $LOCAL_IMAGE 已存在，跳过。"
            continue
        fi

        echo "------------------------------------------------"
        echo "正在拉取: $REMOTE_IMAGE"
        
        # 4. 执行拉取
        docker pull $REMOTE_IMAGE
        
        if [ $? -eq 0 ]; then
            # 5. 重新打标签并清理前缀
            docker tag $REMOTE_IMAGE $LOCAL_IMAGE
            docker rmi $REMOTE_IMAGE
            echo "[DONE] $LOCAL_IMAGE 同步完成"
        else
            echo "[ERROR] 拉取失败: $REMOTE_IMAGE"
        fi
    done
done

echo "------------------------------------------------"
echo "所有镜像同步检查已完成！"
