#!/bin/sh
# geodema-sub.sh — врап Remnawave XRAY-подписки в конфиг xkeen (Keenetic)
# Берёт "Авто"-балансер (все ноды + failover + наш RU-роутинг), подменяет inbound на TPROXY.
# Юзалка: sh geodema-sub.sh https://account.geodema.org/ВАШ_КОД
set -e
SUB="$1"; [ -z "$SUB" ] && { echo "Использование: sh geodema-sub.sh <sub-url>"; exit 1; }
SUB="${SUB%/}"
CFG="/opt/etc/xray/configs"
command -v jq >/dev/null 2>&1 || { echo "[x] нужен jq: opkg install jq"; exit 1; }

# --- стабильный HWID роутера (иначе subpage отдаёт заглушку 'App not supported') ---
HWID_FILE="/opt/etc/xray/.geodema_hwid"
if [ -f "$HWID_FILE" ]; then HWID=$(cat "$HWID_FILE"); else
  HWID=$( (cat /proc/sys/kernel/random/uuid 2>/dev/null || date +%s%N) | md5sum | cut -c1-32 )
  echo "$HWID" > "$HWID_FILE"
fi

echo "[*] тяну подписку..."
TMP=/tmp/geodema_sub.json
curl -s --max-time 40 -H "x-hwid: $HWID" -H "x-device-os: Linux" -H "x-ver-os: OpenWrt" \
     -H "x-device-model: Router" -H "User-Agent: Happ/2.0.0" -o "$TMP" "${SUB}/json" \
  || { echo "[x] не скачалась подписка"; exit 1; }

jq -e 'type=="array"' "$TMP" >/dev/null 2>&1 || { echo "[x] подписка не JSON-массив (проверь код/HWID-лимит)"; head -c 200 "$TMP"; exit 1; }

# выбрать "Авто" (балансер) либо первый конфиг
jq '[.[] | select((.remarks//"")|test("Авто|Auto|Самый быстр"))][0] // .[0]' "$TMP" > /tmp/geodema_auto.json
REM=$(jq -r '.remarks//"?"' /tmp/geodema_auto.json)
NSRV=$(jq '[.outbounds[]|select(.protocol=="vless" or .protocol=="vmess" or .protocol=="trojan")]|length' /tmp/geodema_auto.json)
echo "[*] выбран профиль: $REM (серверов: $NSRV)"

mkdir -p "$CFG"
echo '{"log":{"loglevel":"warning"}}' > "$CFG/01_log.json"
jq '{dns:.dns}' /tmp/geodema_auto.json > "$CFG/02_dns.json"
# TPROXY-inbound (tcp+udp — для игр/QUIC) — статичный, НЕ из подписки
cat > "$CFG/03_inbounds.json" <<'IEOF'
{"inbounds":[{"tag":"redirect","port":61219,"protocol":"dokodemo-door","settings":{"network":"tcp,udp","followRedirect":true},"streamSettings":{"sockopt":{"tproxy":"tproxy"}},"sniffing":{"enabled":true,"destOverride":["http","tls","quic"]}}]}
IEOF
jq '{outbounds:.outbounds}' /tmp/geodema_auto.json > "$CFG/04_outbounds.json"
jq '{routing:.routing}
    + (if .burstObservatory then {burstObservatory:.burstObservatory} else {} end)
    + (if .observatory     then {observatory:.observatory}         else {} end)' \
   /tmp/geodema_auto.json > "$CFG/05_routing.json"
# лишние старые файлы xkeen (06+) убрать, чтоб не конфликтовали
rm -f "$CFG"/06_*.json "$CFG"/07_*.json "$CFG"/08_*.json "$CFG"/09_*.json "$CFG"/10_*.json 2>/dev/null || true

echo "[*] проверка конфига..."
if /opt/sbin/xray -test -confdir "$CFG" >/tmp/geodema_xray.log 2>&1; then
  echo "[ok] конфиг валиден, рестарт xkeen..."
  xkeen -restart 2>/dev/null || /opt/sbin/xkeen -restart 2>/dev/null || echo "[!] запусти вручную: xkeen -restart"
  echo "[✓] готово. профиль: $REM"
else
  echo "[x] конфиг НЕ прошёл xray -test:"; tail -3 /tmp/geodema_xray.log; exit 1
fi
