#!/bin/bash

# 检查是否安装了jq
if ! command -v jq &> /dev/null; then
  echo "jq 未安装，正在安装..."
  if [ -x "$(command -v apt-get)" ]; then
    apt-get update
    apt-get install -y jq
  elif [ -x "$(command -v yum)" ]; then
    yum install -y jq
  else
    echo "无法确定包管理器，请手动安装 jq"
    exit 1
  fi
else
  echo "jq 已安装"
fi

# 获取所有正在运行的Docker容器ID
container_ids=$(docker ps -q)

if [ -z "$container_ids" ]; then
  echo "没有正在运行的Docker容器"
  exit 0
fi

# 遍历每个容器ID
for container_id in $container_ids; do
  # 获取容器的挂载信息
  mounts=$(docker inspect --format='{{json .Mounts}}' $container_id)

  # 查找包含cert目录的挂载点，且包含特定文件名特征
  host_dirs=$(echo "$mounts" | jq -r '.[] | select(.Destination | test("/cert$")) | .Source' | sort -u)

  config_updated=false

  if [ -n "$host_dirs" ]; then
    echo "处理容器ID: $container_id"
    for host_dir in $host_dirs; do
      # 获取上一级目录，例如 /etc/fly229/
      parent_dir=$(dirname "$host_dir")
      echo "宿主机目录: $parent_dir"

      # 如果host_dir是文件，则获取其父目录
      if [ -f "$host_dir" ]; then
        parent_dir=$(dirname "$host_dir")
      fi

      # 进入宿主机的上一级目录
      if [ -d "$parent_dir" ]; then
        cd "$parent_dir" || { echo "无法进入目录 $parent_dir"; continue; }
        # 搜索并替换config.yml中的URL
        if [ -f "config.yml" ]; then
          sed -i 's#https://fly.nullmouse.xyz#https://api.f34yn938qwycv.uk#g' config.yml
          echo "已更新 config.yml 中的 URL"
          config_updated=true
        else
          echo "未找到 config.yml 文件"
        fi

        # 返回之前的目录
        cd - || exit
      else
        echo "目录 $parent_dir 不存在"
      fi
    done

    # 如果config.yml更新成功，则重启Docker容器
    if [ "$config_updated" = true ]; then
      docker restart $container_id
    else
      echo "未更新 config.yml，跳过重启容器 $container_id"
    fi
  else
    echo "容器ID: $container_id 没有找到匹配的挂载点"
  fi
done
echo "所有容器处理完毕"
