#!/usr/bin/env bash

set -euo pipefail

# 获取默认路由接口
IFACE=$(
  ip -4 route show default \
    | awk 'NR == 1 {print $5}'
)

if [[ -z "${IFACE:-}" ]]; then
  echo "错误：未找到默认路由接口" >&2
  exit 1
fi

# 获取默认路由接口上的 IPv4 地址：
# 先匹配 192.168.*，没有则匹配 172.29.*
IP=$(
  ip -4 -o addr show dev "$IFACE" scope global \
    | awk '
        {
          split($4, addr, "/")
          ip = addr[1]

          if (ip ~ /^192\.168\./ && ip_192 == "") {
            ip_192 = ip
          }

          if (ip ~ /^172\.29\./ && ip_172 == "") {
            ip_172 = ip
          }
        }
        END {
          if (ip_192 != "") {
            print ip_192
          } else if (ip_172 != "") {
            print ip_172
          }
        }
      '
)

if [[ -z "${IP:-}" ]]; then
  echo "错误：接口 ${IFACE} 上未找到 192.168.* 或 172.29.* 地址" >&2
  exit 1
fi

# 拆分 IP
IFS='.' read -r OCTET1 OCTET2 OCTET3 OCTET4 <<< "$IP"

# 按 /20 网段判断区域
case "$OCTET3" in
  16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31)
    REGION="idc"
    ;;
  48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63)
    REGION="sz"
    ;;
  64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79)
    REGION="bj"
    ;;
  80|81|82|83|84|85|86|87|88|89|90|91|92|93|94|95)
    REGION="sh"
    ;;
  96|97|98|99|100|101|102|103|104|105|106|107|108|109|110|111)
    REGION="cd"
    ;;
  *)
    echo "错误：IP ${IP} 不属于已配置的区域网段" >&2
    exit 1
    ;;
esac

SYSTEM_NAME="${REGION}-${IP//./-}"
echo "hostnamectl set-hostname $SYSTEM_NAME"
echo "$SYSTEM_NAME"