#!/bin/sh
# geodema xkeen — one-button установщик (BETA). Зеркало geodema, без GitHub.
# Юзалка:  sh install.sh https://account.geodema.org/ВАШ_КОД
# Требует: Keenetic + Entware (USB), opkg.
set -e
SUB="$1"
MIRROR="http://files.geodema.network/xkeen"
IP_MIRROR="91.203.36.85"
B="\033[1m"; N="\033[0m"; G="\033[32m"; R="\033[31m"
info(){ printf "${G}[*]${N} %s\n" "$1"; }
die(){ printf "${R}[x]${N} %s\n" "$1"; exit 1; }

[ -z "$SUB" ] && die "укажи ссылку подписки: sh install.sh https://account.geodema.org/КОД"
command -v opkg >/dev/null 2>&1 || die "не найден opkg — нужен Entware на Keenetic (USB-флешка)"

# арка
A=$(uname -m)
case "$A" in
  aarch64|arm64) XZIP="Xray-arm64-v8a.zip" ;;
  mips|mipsel|mips32le) XZIP="Xray-mips32le.zip" ;;
  *) die "неизвестная арка $A (поддержаны aarch64 и mipsel)";;
esac
info "арка: $A → $XZIP"

# fetch с фолбэком на IP (если DNS files.geodema.network не резолвится)
fetch(){ curl -fL --retry 3 --connect-timeout 15 --max-time 300 "$1" -o "$2" 2>/dev/null \
       || curl -fL --retry 3 --resolve files.geodema.network:80:$IP_MIRROR "$1" -o "$2" 2>/dev/null; }

info "ставлю зависимости (curl jq tar unzip iptables tproxy)..."
opkg update >/dev/null 2>&1 || true
opkg install curl jq tar unzip iptables ip6tables 2>/dev/null || true
opkg install iptables-mod-tproxy 2>/dev/null || opkg install kmod-ipt-tproxy 2>/dev/null || true

info "ставлю xray- core с зеркала..."
mkdir -p /opt/sbin /opt/etc/xray/dat /opt/etc/xray/configs /tmp/gx
fetch "$MIRROR/xray/$XZIP" /tmp/gx/xray.zip || die "не скачался xray"
unzip -oq /tmp/gx/xray.zip -d /tmp/gx && mv /tmp/gx/xray /opt/sbin/xray && chmod +x /opt/sbin/xray
info "xray: $(/opt/sbin/xray version 2>/dev/null | head -1)"

info "ставлю geo (v2fly geoip/geosite)..."
fetch "$MIRROR/dat/geoip.dat"   /opt/etc/xray/dat/geoip.dat   || die "geoip не скачался"
fetch "$MIRROR/dat/geosite.dat" /opt/etc/xray/dat/geosite.dat || die "geosite не скачался"
ln -sf /opt/etc/xray/dat/geoip.dat   /opt/sbin/geoip.dat 2>/dev/null || true
ln -sf /opt/etc/xray/dat/geosite.dat /opt/sbin/geosite.dat 2>/dev/null || true

info "ставлю xkeen-менеджер (firewall/init/start-stop)..."
fetch "$MIRROR/xkeen.tar" /tmp/gx/xkeen.tar || die "xkeen.tar не скачался"
tar -xf /tmp/gx/xkeen.tar -C /opt/sbin --overwrite && chmod +x /opt/sbin/xkeen

info "регистрирую xkeen (init.d + TPROXY firewall)..."
# geoip/geosite мы уже поставили сами → xkeen -i отвечаем дефолтами (пропуск скачки гео)
yes '' | /opt/sbin/xkeen -i 2>/dev/null || printf '\n\n\n\n\n\n' | /opt/sbin/xkeen -i 2>/dev/null || \
  info "если -i завис на меню — прожми Enter на дефолтах (geoip/geosite = все)"

info "тяну подписку и собираю конфиг..."
fetch "$MIRROR/geodema-sub.sh" /opt/sbin/geodema-sub.sh
sh /opt/sbin/geodema-sub.sh "$SUB" || die "врап подписки упал"

info "запускаю..."
/opt/sbin/xkeen -restart 2>/dev/null || /opt/sbin/xkeen -start 2>/dev/null || true
printf "${G}${B}[✓] Готово (BETA).${N} Проверь: xkeen -status ; логи: xkeen -log\n"
printf "    Профиль/сервер сменить: правь /opt/etc/xray/configs/04_outbounds.json или перезапусти geodema-sub.sh\n"
