#!/bin/bash
# Script de vérification du panel admin Web Sentinel
# Usage: ssh taaazzz@web-sentinel.taaazzz-prog.fr 'bash -s' < check_admin.sh

echo "🔍 Vérification du Panel Admin Web Sentinel"
echo "============================================="
echo ""

# Couleurs
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m'

ERRORS=0

# 1. Vérifier les conteneurs Docker
echo -e "${YELLOW}[1/8]${NC} Vérification des conteneurs Docker..."
if docker ps | grep -q "web-sentinel-admin-backend"; then
    echo -e "${GREEN}✅ Backend admin actif${NC}"
else
    echo -e "${RED}❌ Backend admin non trouvé${NC}"
    ERRORS=$((ERRORS + 1))
fi

if docker ps | grep -q "web-sentinel-admin-frontend"; then
    echo -e "${GREEN}✅ Frontend admin actif${NC}"
else
    echo -e "${RED}❌ Frontend admin non trouvé${NC}"
    ERRORS=$((ERRORS + 1))
fi

# 2. Vérifier la base PostgreSQL
echo -e "\n${YELLOW}[2/8]${NC} Vérification de la base PostgreSQL..."
if docker ps | grep -q "web-sentinel-db"; then
    echo -e "${GREEN}✅ PostgreSQL actif${NC}"
    
    # Vérifier les colonnes SAST
    COLUMNS=$(docker exec web-sentinel-db psql -U websentinel_user -d websentinel_prod -c "\d users" 2>/dev/null | grep -c "allow_source_scan\|max_source_files")
    if [ "$COLUMNS" -ge 2 ]; then
        echo -e "${GREEN}✅ Colonnes SAST présentes dans la table users${NC}"
    else
        echo -e "${RED}❌ Colonnes SAST manquantes (migration non appliquée)${NC}"
        ERRORS=$((ERRORS + 1))
    fi
else
    echo -e "${RED}❌ PostgreSQL non trouvé${NC}"
    ERRORS=$((ERRORS + 1))
fi

# 3. Vérifier le réseau Docker
echo -e "\n${YELLOW}[3/8]${NC} Vérification du réseau Docker..."
NETWORK=$(docker inspect web-sentinel-db 2>/dev/null | grep -o '"NetworkMode": "[^"]*"' | cut -d'"' -f4)
echo "   Réseau détecté: $NETWORK"

if docker network ls | grep -q "$NETWORK"; then
    echo -e "${GREEN}✅ Réseau Docker trouvé${NC}"
else
    echo -e "${RED}❌ Réseau Docker non trouvé${NC}"
    ERRORS=$((ERRORS + 1))
fi

# 4. Vérifier Traefik
echo -e "\n${YELLOW}[4/8]${NC} Vérification de Traefik..."
if docker ps | grep -q "traefik"; then
    echo -e "${GREEN}✅ Traefik actif${NC}"
    
    # Vérifier les routes
    ROUTES=$(docker logs faildaily-traefik-ssl 2>&1 | grep -c "admin.web-sentinel\|admin-api.web-sentinel")
    if [ "$ROUTES" -gt 0 ]; then
        echo -e "${GREEN}✅ Routes admin détectées dans Traefik${NC}"
    else
        echo -e "${YELLOW}⚠️  Routes admin non trouvées dans les logs (peut être normal)${NC}"
    fi
else
    echo -e "${RED}❌ Traefik non trouvé${NC}"
    ERRORS=$((ERRORS + 1))
fi

# 5. Vérifier le fichier .env.admin
echo -e "\n${YELLOW}[5/8]${NC} Vérification de la configuration..."
if [ -f ~/web-sentinel/deployment/.env.admin ]; then
    echo -e "${GREEN}✅ Fichier .env.admin trouvé${NC}"
    
    # Vérifier la clé secrète
    if grep -q "CHANGE_ME_RANDOM_STRING_HERE" ~/web-sentinel/deployment/.env.admin; then
        echo -e "${RED}❌ ADMIN_SECRET_KEY non configurée (valeur par défaut détectée)${NC}"
        ERRORS=$((ERRORS + 1))
    else
        echo -e "${GREEN}✅ ADMIN_SECRET_KEY configurée${NC}"
    fi
else
    echo -e "${RED}❌ Fichier .env.admin non trouvé${NC}"
    ERRORS=$((ERRORS + 1))
fi

# 6. Vérifier les logs backend
echo -e "\n${YELLOW}[6/8]${NC} Vérification des logs backend..."
if docker logs web-sentinel-admin-backend 2>&1 | tail -20 | grep -q "Application startup complete"; then
    echo -e "${GREEN}✅ Backend démarré correctement${NC}"
elif docker logs web-sentinel-admin-backend 2>&1 | tail -20 | grep -qi "error\|exception\|failed"; then
    echo -e "${RED}❌ Erreurs détectées dans le backend:${NC}"
    docker logs web-sentinel-admin-backend 2>&1 | tail -5
    ERRORS=$((ERRORS + 1))
else
    echo -e "${YELLOW}⚠️  Backend démarré, état incertain${NC}"
fi

# 7. Vérifier les ports exposés
echo -e "\n${YELLOW}[7/8]${NC} Vérification des ports..."
if netstat -tuln 2>/dev/null | grep -q ":80\|:443"; then
    echo -e "${GREEN}✅ Ports HTTP/HTTPS actifs${NC}"
else
    echo -e "${RED}❌ Ports HTTP/HTTPS non accessibles${NC}"
    ERRORS=$((ERRORS + 1))
fi

# 8. Test de connectivité API
echo -e "\n${YELLOW}[8/8]${NC} Test de connectivité API..."
if curl -sSf -o /dev/null http://localhost:8000/api/health 2>/dev/null; then
    echo -e "${GREEN}✅ API backend accessible en local${NC}"
else
    echo -e "${RED}❌ API backend non accessible${NC}"
    ERRORS=$((ERRORS + 1))
fi

# Résumé
echo ""
echo "============================================="
if [ $ERRORS -eq 0 ]; then
    echo -e "${GREEN}✅ Tous les tests sont passés ! Panel admin opérationnel.${NC}"
    echo ""
    echo "🌐 Accès :"
    echo "   - Frontend : https://admin.web-sentinel.taaazzz-prog.fr"
    echo "   - API : https://admin-api.web-sentinel.taaazzz-prog.fr"
    exit 0
else
    echo -e "${RED}❌ $ERRORS erreur(s) détectée(s). Veuillez corriger.${NC}"
    echo ""
    echo "📝 Pour diagnostiquer :"
    echo "   docker logs web-sentinel-admin-backend"
    echo "   docker logs web-sentinel-admin-frontend"
    echo "   docker logs faildaily-traefik-ssl | grep admin"
    exit 1
fi
