#!/usr/bin/env bash
# check.sh — Проверка работоспособности прокси
set -euo pipefail

GREEN='\033[0;32m'; RED='\033[0;31m'; YELLOW='\033[1;33m'; NC='\033[0m'
ok()   { echo -e "  ${GREEN}✓${NC} $*"; }
fail() { echo -e "  ${RED}✗${NC} $*"; }
info() { echo -e "${YELLOW}»${NC} $*"; }

HTTP_PROXY="http://127.0.0.1:8888"
SOCKS_PROXY="socks5://127.0.0.1:1080"

echo ""
info "════════════════════════════════════════"
info "  Proxy VM — проверка работоспособности"
info "════════════════════════════════════════"
echo ""

### ── 1. Xray сервис ────────────────────────────────────────────────────────
info "1. Статус сервиса Xray..."
if systemctl is-active --quiet xray 2>/dev/null; then
    ok "xray.service активен"
else
    fail "xray.service НЕ активен"
fi

### ── 2. Порты слушают ──────────────────────────────────────────────────────
info "2. Проверка портов..."
for PORT in 8888 1080 12345; do
    if ss -tlnup 2>/dev/null | grep -q ":${PORT} " || \
       ss -ulnup 2>/dev/null | grep -q ":${PORT} "; then
        ok "Порт $PORT слушает"
    else
        fail "Порт $PORT НЕ слушает"
    fi
done

### ── 3. HTTP прокси ─────────────────────────────────────────────────────────
info "3. HTTP прокси → api.telegram.org..."
if curl -s -o /dev/null -w "%{http_code}" \
        --proxy "$HTTP_PROXY" \
        --max-time 10 \
        "https://api.telegram.org" | grep -qE "^[23]"; then
    ok "api.telegram.org доступен через HTTP прокси"
else
    fail "api.telegram.org НЕ доступен через HTTP прокси"
fi

info "4. HTTP прокси → youtube.com..."
if curl -s -o /dev/null -w "%{http_code}" \
        --proxy "$HTTP_PROXY" \
        --max-time 10 \
        "https://www.youtube.com" | grep -qE "^[23]"; then
    ok "youtube.com доступен через HTTP прокси"
else
    fail "youtube.com НЕ доступен через HTTP прокси"
fi

### ── 4. SOCKS5 прокси ──────────────────────────────────────────────────────
info "5. SOCKS5 → api.telegram.org..."
if curl -s -o /dev/null -w "%{http_code}" \
        --proxy "$SOCKS_PROXY" \
        --max-time 10 \
        "https://api.telegram.org" | grep -qE "^[23]"; then
    ok "api.telegram.org доступен через SOCKS5"
else
    fail "api.telegram.org НЕ доступен через SOCKS5"
fi

### ── 5. IP за прокси ────────────────────────────────────────────────────────
info "6. Внешний IP через прокси..."
EXT_IP=$(curl -s --proxy "$HTTP_PROXY" --max-time 10 "https://api.ipify.org" 2>/dev/null || echo "ошибка")
LOCAL_IP=$(curl -s --max-time 5 "https://api.ipify.org" 2>/dev/null || echo "ошибка")
echo "     Прямой IP:    $LOCAL_IP"
echo "     Через прокси: $EXT_IP"
if [[ "$EXT_IP" != "$LOCAL_IP" && "$EXT_IP" != "ошибка" ]]; then
    ok "IP отличается — трафик идёт через прокси"
else
    fail "IP совпадает или ошибка — возможно прокси не работает"
fi

### ── 6. IP forwarding ──────────────────────────────────────────────────────
info "7. IP forwarding..."
FWD=$(cat /proc/sys/net/ipv4/ip_forward)
if [[ "$FWD" == "1" ]]; then
    ok "IP forwarding включён"
else
    fail "IP forwarding выключен!"
fi

echo ""
info "Проверка завершена."
echo ""
