#!/bin/bash
# ============================================================================
#  VERIFICADOR — Comprueba que el parche esta instalado y funcionando
#  Uso: sudo bash verificar.sh   (o sin sudo para pruebas basicas)
# ============================================================================
TARGET="/usr/bin/astra"
SERVICE="astra"
EXPECTED_MD5="d3855d37bfb3c5f313ed47346d4299d8"

G="\033[32m"; R="\033[31m"; Y="\033[33m"; B="\033[36m"; N="\033[0m"
ok()   { echo -e "${G}[+]${N} $1"; }
err()  { echo -e "${R}[X]${N} $1"; }
info() { echo -e "${B}[*]${N} $1"; }

PASS=0
FAIL=0

check() {
    if [ "$2" == "$3" ]; then
        ok "$1: $2"
        PASS=$((PASS+1))
    else
        err "$1: $2 (esperado: $3)"
        FAIL=$((FAIL+1))
    fi
}

echo "=============================================="
echo " VERIFICACION DEL PARCHE v2"
echo "=============================================="
echo

# 1. Binario
info "--- Binario ---"
if [ -f "$TARGET" ]; then
    MD5=$(md5sum "$TARGET" | awk '{print $1}')
    check "MD5" "$MD5" "$EXPECTED_MD5"
    ok "Tamano: $(stat -c %s "$TARGET") bytes"
else
    err "No existe $TARGET"
    FAIL=$((FAIL+1))
fi
echo

# 2. Parche presente
info "--- Parche en binario ---"
if strings "$TARGET" 2>/dev/null | grep -q "ip-toggle"; then
    ok "Botones ON/OFF presentes"
    PASS=$((PASS+1))
else
    err "Botones ON/OFF NO encontrados"
    FAIL=$((FAIL+1))
fi

if strings "$TARGET" 2>/dev/null | grep -q "sub-comment\|_comments"; then
    ok "Soporte de comentarios presente"
    PASS=$((PASS+1))
else
    err "Comentarios NO encontrados"
    FAIL=$((FAIL+1))
fi
echo

# 3. Servicio
info "--- Servicio ---"
if systemctl is-active --quiet "$SERVICE"; then
    ok "Astra activo"
    PASS=$((PASS+1))
else
    err "Astra NO esta activo"
    FAIL=$((FAIL+1))
fi
echo

# 4. Version
info "--- Version ---"
astra --version 2>&1 | head -1 | sed 's/^/    /'
echo

# 5. Streams (si hay acceso local)
info "--- Streams ---"
HTTP=$(curl -s -o /dev/null -w "%{http_code}" --max-time 5 "http://127.0.0.1:8000/playlist.m3u8" 2>/dev/null)
check "Playlist" "$HTTP" "200"
echo

# 6. Auth (IP no autorizada)
info "--- Auth ---"
HTTP=$(curl -s -o /dev/null -w "%{http_code}" --max-time 5 "http://127.0.0.1:8000/control/" -X POST -H "Content-Type: application/json" -d '{"cmd":"status"}' 2>/dev/null)
if [ "$HTTP" == "403" ] || [ "$HTTP" == "200" ]; then
    ok "Auth responde (HTTP $HTTP)"
    PASS=$((PASS+1))
else
    err "Auth no responde (HTTP $HTTP)"
    FAIL=$((FAIL+1))
fi
echo

# 7. Config
info "--- Config ---"
if python3 -c "import json; json.load(open('/etc/astra/astra.conf'))" 2>/dev/null; then
    ok "astra.conf es JSON valido"
    PASS=$((PASS+1))
    python3 -c "
import json
a = json.load(open('/etc/astra/astra.conf')).get('auth', {})
allow = a.get('http_ip_allow', [])
com = a.get('http_ip_allow_comments', [])
dis = a.get('http_ip_disabled', [])
dc = a.get('http_ip_disabled_comments', [])
print(f'    IPs activas: {len(allow)}')
print(f'    IPs desactivadas: {len(dis)}')
print(f'    Alineacion allow/comments: {\"OK\" if len(com) == len(allow) else \"DESALINEADO\"}')
print(f'    Alineacion disabled/dcomments: {\"OK\" if len(dc) == len(dis) else \"DESALINEADO\"}')
"
else
    err "astra.conf NO es JSON valido"
    FAIL=$((FAIL+1))
fi
echo

# Resultado
echo "=============================================="
if [ "$FAIL" == "0" ]; then
    echo -e " ${G}VERIFICACION COMPLETA: TODO OK${N} ($PASS pruebas)"
else
    echo -e " ${R}VERIFICACION: $FAIL FALLOS${N} ($PASS OK)"
fi
echo "=============================================="
exit $FAIL
