#!/bin/bash

# 本地仓库地址
LOCAL_REPO="docker-hl.filee.us"
# 仓库服务器地址
REPO_SERVER="http://38.61.6.9:4000/docker_pull_push"
# 获取用户输入的镜像名称（例如：mysql:9.0）
IMAGE_NAME="$1"

# 如果没有传入镜像名称，则提示用户输入
if [[ -z "$IMAGE_NAME" ]]; then
  echo
  echo -e "\e[1;32m请提供要拉取的镜像名称（例如：mysql:9.0）\e[0m"
  echo
  while true; do
    read -p "请输入镜像名称: " IMAGE_NAME
    if [[ -z "$IMAGE_NAME" ]]; then
      echo
      echo -e "\e[1;31m镜像名称不能为空，请重新输入镜像名称。\e[0m"
      echo
    else
      break
    fi
  done
fi

# 检查镜像是否已经存在于当前服务器
echo
echo -e "\e[1;32m欢迎使用docker代理拉取服务，本服务由咕噜云 | UP大笨兔兔提供和维护\e[0m"
echo
echo -e "\e[1;32m检查镜像 $IMAGE_NAME 是否存在于当前服务器...\e[0m"

if docker images | grep -q "$IMAGE_NAME"; then
  # 如果镜像已经存在，则显示镜像已拉取过
  echo
  echo -e "\e[1;32m镜像 $IMAGE_NAME 已经拉取过，当前服务器上已经存在。\e[0m"
  docker images  # 输出当前本地镜像列表
  exit 0         # 立即退出脚本，避免继续执行后续操作
else
  # 镜像不存在，触发仓库服务器拉取镜像操作
  echo
  echo -e "\e[1;32m镜像 $IMAGE_NAME 正在搜索操作中，镜像越大处理时间越久请稍等...超过3G的镜像可能会失败\e[0m"

  # 发送 HTTP 请求到仓库服务器
  RESPONSE=$(curl -s -X POST -H "Content-Type: application/json" -d '{"image_name": "'$IMAGE_NAME'"}' $REPO_SERVER)

  # 从仓库响应中提取 success 和 message 字段
  SUCCESS=$(echo "$RESPONSE" | grep -oP '"success":\s*\K(true|false)')
  MESSAGE=$(echo "$RESPONSE" | grep -oP '"message":\s*"\K([^"]+)' )

  # 检查仓库服务器返回的响应内容
  if [[ "$SUCCESS" == "true" ]]; then
    # 确保仓库输出是中文
    echo
    echo -e "\e[1;32m服务器连接成功：$MESSAGE\e[0m"
    echo
    # 从仓库拉取镜像到本地
    docker pull $LOCAL_REPO/$IMAGE_NAME
    if [[ $? -eq 0 ]]; then
      # 重新命名镜像，去掉仓库地址，只保留镜像名称
      IMAGE_NAME_ONLY=$(echo "$IMAGE_NAME" | sed "s|$LOCAL_REPO/||")
      docker tag $LOCAL_REPO/$IMAGE_NAME $IMAGE_NAME_ONLY
      docker rmi $LOCAL_REPO/$IMAGE_NAME  # 删除拉取的原镜像（带仓库地址）
      echo
      echo -e "\e[1;32m镜像 $IMAGE_NAME_ONLY \e[0m"
    else
      echo
      echo -e "\e[1;31m从仓库拉取镜像失败，可能是镜像名称错误，或者网络问题\e[0m"
      echo
      exit 1
    fi
  else
    # 显示中文错误信息
    echo -e "\e[1;31m从仓库服务器拉取镜像失败：$MESSAGE\e[0m"
    exit 1
  fi
fi

# 输出所有镜像列表
echo
echo -e "\e[1;32m操作完成，当前服务器上的所有镜像：\e[0m"
echo
docker images
echo
