#!/bin/bash

# 自动安装依赖工具
install_dependencies() {
    # 检测操作系统类型
    if [[ "$OSTYPE" == "darwin"* ]]; then
        # macOS 系统（使用 Homebrew）
        if ! command -v brew &> /dev/null; then
            echo "检测到未安装 Homebrew，正在安装..."
            /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" || {
                echo "Homebrew 安装失败，请手动安装后重试"
                exit 1
            }
        fi
        echo "正在安装依赖工具（curl、jq）..."
        brew install curl jq || {
            echo "依赖安装失败"
            exit 1
        }
    elif [[ -f /etc/os-release ]]; then
        . /etc/os-release
        if [[ $ID == "debian" || $ID == "ubuntu" || $ID_LIKE == "debian" ]]; then
            # Debian/Ubuntu 系统（使用 apt）
            echo "正在安装依赖工具（curl、jq）..."
            sudo apt update -qq && sudo apt install -y curl jq || {
                echo "依赖安装失败"
                exit 1
            }
        elif [[ $ID == "centos" || $ID == "rhel" || $ID_LIKE == "rhel" ]]; then
            # CentOS/RHEL 系统（先装 EPEL 仓库，再装 jq）
            echo "检测到 RHEL/CentOS 系统，先安装 EPEL 扩展仓库..."
            # 安装 EPEL 仓库（包含 jq 软件包）
            sudo yum install -y epel-release || {
                echo "EPEL 仓库安装失败，无法获取 jq 软件包"
                exit 1
            }
            # 安装依赖
            echo "正在安装依赖工具（curl、jq）..."
            sudo yum install -y curl jq || {
                echo "依赖安装失败"
                exit 1
            }
        else
            echo "不支持的 Linux 发行版，请手动安装 curl 和 jq"
            exit 1
        fi
    else
        echo "不支持的操作系统，请手动安装 curl 和 jq"
        exit 1
    fi
}

# 检查并安装依赖
check_and_install() {
    local missing=0
    for tool in curl jq; do
        if ! command -v "$tool" &> /dev/null; then
            echo "未检测到 $tool，需要安装"
            missing=1
        fi
    done
    if [[ $missing -eq 1 ]]; then
        install_dependencies
    fi
}

# 主查询逻辑
query_ip_info() {
    echo "正在查询公网IP信息..."
    response=$(curl -s "https://ipinfo.io")

    # 检查API响应是否正常
    if [ -z "$response" ] || echo "$response" | jq -e '.error' &> /dev/null; then
        echo "查询失败，请检查网络连接"
        exit 1
    fi

    # 解析原始数据
    ip=$(echo "$response" | jq -r '.ip // "未知"')
    city=$(echo "$response" | jq -r '.city // "未知"')
    region=$(echo "$response" | jq -r '.region // "未知"')
    country=$(echo "$response" | jq -r '.country // "未知"')
    loc=$(echo "$response" | jq -r '.loc // "未知"')
    org=$(echo "$response" | jq -r '.org // "未知"')
    postal=$(echo "$response" | jq -r '.postal // "未知"')
    timezone=$(echo "$response" | jq -r '.timezone // "未知"')

    # 运营商识别（基于AS号映射四大运营商）
    as_number=$(echo "$org" | grep -oE 'AS[0-9]+' | sed 's/AS//')
    case $as_number in
        4837|17621) isp="联通" ;;               # 联通AS号
        4134|9808|37963) isp="电信" ;;          # 电信AS号
        45090|58453|9394) isp="移动" ;;         # 移动AS号
        24400) isp="广电" ;;                    # 广电AS号
        *) isp="其他运营商（$org）" ;;          # 未匹配到的情况
    esac

    # 输出中文结果
    echo -e "\n查询结果："
    jq -n \
        --arg ip "$ip" \
        --arg city "$city" \
        --arg region "$region" \
        --arg country "$country" \
        --arg loc "$loc" \
        --arg isp "$isp" \
        --arg postal "$postal" \
        --arg timezone "$timezone" \
        '{
            "IP地址": $ip,
            "城市": $city,
            "省份": $region,
            "国家代码": $country,
            "经纬度": $loc,
            "运营商": $isp,
            "邮政编码": $postal,
            "时区": $timezone
        }'
}

# 执行流程
check_and_install  # 检查并安装依赖
query_ip_info      # 执行IP查询