#!/bin/sh
# geodema: загрузка подписки в SSClash + правки совместимости (TUN/DNS/Dashboard) + HWID
SUB="$1"
[ -z "$SUB" ] && { echo "Использование: sh sub.sh https://account.geodema.org/ВАШ_КОД"; exit 1; }
SUB="${SUB%/}"

# --- стабильный HWID роутера (иначе subpage отдаёт заглушку 'App not supported') ---
HWIDFILE=/opt/clash/.hwid
if [ -f "$HWIDFILE" ]; then
  HWID=$(cat "$HWIDFILE")
else
  MAC=$(cat /sys/class/net/eth0/address 2>/dev/null | tr -d ':')
  [ -z "$MAC" ] && MAC=$(cat /sys/class/net/*/address 2>/dev/null | grep -viE '^(00:){5}00' | head -1 | tr -d ':')
  [ -z "$MAC" ] && MAC=$(head -c16 /dev/urandom 2>/dev/null | md5sum | cut -c1-12)
  HWID="ssclash-${MAC}"
  echo "$HWID" > "$HWIDFILE"
fi
echo "[i] HWID роутера: $HWID"

echo "[+] Скачиваю конфиг с подписки (c HWID)..."
if command -v curl >/dev/null 2>&1; then
  curl -s --max-time 40 -H "x-hwid: $HWID" -H "x-device-os: Linux" -H "x-ver-os: OpenWrt" -H "x-device-model: Router" -o /opt/clash/config.yaml "${SUB}/mihomo"
else
  wget --no-proxy --header="x-hwid: $HWID" --header="x-device-os: Linux" --header="x-ver-os: OpenWrt" --header="x-device-model: Router" -O /opt/clash/config.yaml "${SUB}/mihomo" 2>/dev/null
fi

grep -q '^mixed-port' /opt/clash/config.yaml 2>/dev/null || { echo "[x] подписка вернула не mihomo-конфиг"; exit 1; }
if grep -q 'App not supported' /opt/clash/config.yaml; then
  echo "[x] subpage вернул ЗАГЛУШКУ (App not supported) — лимит устройств (HWID) исчерпан."
  echo "    Сбрось привязки устройств в боте/ЛК или подними тариф, потом повтори."
  exit 1
fi
echo "[+] Конфиг с реальными серверами получен."

echo "[+] Правки совместимости с SSClash..."
echo 'PROXY_MODE=tun' > /opt/clash/settings
grep -q 'device: clash-tun' /opt/clash/config.yaml || sed -i '/^tun:/a\  device: clash-tun' /opt/clash/config.yaml
sed -i 's/stack: mixed/stack: system/' /opt/clash/config.yaml
grep -q 'listen: 0.0.0.0:7874' /opt/clash/config.yaml || sed -i '/^dns:/a\  listen: 0.0.0.0:7874' /opt/clash/config.yaml

# --- Dashboard: подписка НЕ содержит external-controller/ui → возвращаем (морда zashboard вшита в ipk: /opt/clash/ui) ---
if grep -q '^external-controller:' /opt/clash/config.yaml; then
  sed -i 's/^external-controller:.*/external-controller: 0.0.0.0:9090/' /opt/clash/config.yaml
else
  printf 'external-controller: 0.0.0.0:9090\n' >> /opt/clash/config.yaml
fi
grep -q '^external-ui:' /opt/clash/config.yaml || printf 'external-ui: ./ui\n' >> /opt/clash/config.yaml

echo "[+] Запуск..."
/etc/init.d/clash enable >/dev/null 2>&1
/etc/init.d/clash restart >/dev/null 2>&1
sleep 12
echo "[i] Готово. Проверка exit:"
curl -s --max-time 15 http://ip-api.com/line?fields=country,city,query 2>/dev/null | tr '\n' ' '; echo
echo "[i] Dashboard: LuCI -> Services -> SSClash -> Dashboard (или http://<router-ip>:9090/ui)"
