#!/bin/bash
# ═══════════════════════════════════════════════════════════════════
# TheKetoBay — Health Monitor
# Usage: bash monitor.sh
# ═══════════════════════════════════════════════════════════════════

GREEN='\033[0;32m'; YELLOW='\033[1;33m'; RED='\033[0;31m'; NC='\033[0m'
ok()   { echo -e "  ${GREEN}✅ $1${NC}"; }
warn() { echo -e "  ${YELLOW}⚠️  $1${NC}"; }
fail() { echo -e "  ${RED}❌ $1${NC}"; }

echo ""
echo -e "${GREEN}🥑 TheKetoBay — System Health Check${NC}"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""

# ── Docker services ────────────────────────────────────────────────
echo "📦 Docker Services:"
SERVICES=("ketobay_db" "ketobay_redis" "ketobay_ollama" "ketobay_api" "ketobay_web" "ketobay_bot" "ketobay_nginx")
for svc in "${SERVICES[@]}"; do
  STATUS=$(docker inspect -f '{{.State.Status}}' $svc 2>/dev/null || echo "not found")
  if [ "$STATUS" = "running" ]; then
    ok "$svc"
  elif [ "$STATUS" = "not found" ]; then
    warn "$svc (not found)"
  else
    fail "$svc ($STATUS)"
  fi
done

echo ""
echo "🌐 Endpoints:"

# API health
API=$(curl -sf http://localhost:3001/health 2>/dev/null | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('status','?'))" 2>/dev/null || echo "unreachable")
[ "$API" = "ok" ] && ok "API: http://localhost:3001/health" || fail "API: $API"

# Ollama
OLLAMA=$(curl -sf http://localhost:11434/api/tags 2>/dev/null | python3 -c "import sys,json; d=json.load(sys.stdin); print(len(d.get('models',[])),' models')" 2>/dev/null || echo "unreachable")
[[ "$OLLAMA" == *"models"* ]] && ok "Ollama: $OLLAMA" || fail "Ollama: $OLLAMA"

# HTTPS (if domain set)
DOMAIN=$(grep FRONTEND_URL /var/www/theketobay/.env 2>/dev/null | cut -d= -f2 | tr -d '"' | sed 's|https://||')
if [ -n "$DOMAIN" ]; then
  HTTP_CODE=$(curl -so /dev/null -w "%{http_code}" https://$DOMAIN/api/health 2>/dev/null || echo "000")
  [ "$HTTP_CODE" = "200" ] && ok "HTTPS: https://$DOMAIN ($HTTP_CODE)" || warn "HTTPS: $DOMAIN returned $HTTP_CODE"
fi

echo ""
echo "💾 Resources:"

# Disk
DISK=$(df -h / | awk 'NR==2 {print $3"/"$2" ("$5" used)"}')
DISK_PCT=$(df / | awk 'NR==2 {print $5}' | tr -d '%')
[ "$DISK_PCT" -lt 80 ] && ok "Disk: $DISK" || warn "Disk: $DISK ← WARNING"

# RAM
RAM_USED=$(free -h | awk 'NR==2{print $3}')
RAM_TOTAL=$(free -h | awk 'NR==2{print $2}')
RAM_PCT=$(free | awk 'NR==2{printf "%.0f", $3/$2*100}')
[ "$RAM_PCT" -lt 85 ] && ok "RAM: $RAM_USED / $RAM_TOTAL (${RAM_PCT}%)" || warn "RAM: $RAM_USED / $RAM_TOTAL (${RAM_PCT}%) ← HIGH"

# Docker disk
DOCKER_DISK=$(docker system df 2>/dev/null | grep "Total Space" | awk '{print $4}' || echo "?")

echo ""
echo "🗄️  Database:"
DB_COUNT=$(docker exec ketobay_db psql -U ketobay -t -c "SELECT COUNT(*) FROM users;" 2>/dev/null | tr -d ' ' || echo "?")
PLAN_COUNT=$(docker exec ketobay_db psql -U ketobay -t -c "SELECT COUNT(*) FROM keto_plans;" 2>/dev/null | tr -d ' ' || echo "?")
LEAD_COUNT=$(docker exec ketobay_db psql -U ketobay -t -c "SELECT COUNT(*) FROM email_leads;" 2>/dev/null | tr -d ' ' || echo "?")
ORDER_SUM=$(docker exec ketobay_db psql -U ketobay -t -c "SELECT COALESCE(SUM(amount),0) FROM orders WHERE status='COMPLETED';" 2>/dev/null | tr -d ' ' || echo "?")
ok "Users: $DB_COUNT | Plans: $PLAN_COUNT | Leads: $LEAD_COUNT | Revenue: \$$ORDER_SUM"

echo ""
echo "🔒 SSL:"
CERT_FILE="/var/www/theketobay/infrastructure/certbot/conf/live/theketobay.com/fullchain.pem"
if [ -f "$CERT_FILE" ]; then
  EXPIRY=$(openssl x509 -enddate -noout -in "$CERT_FILE" 2>/dev/null | cut -d= -f2)
  DAYS=$(( ($(date -d "$EXPIRY" +%s) - $(date +%s)) / 86400 ))
  [ "$DAYS" -gt 30 ] && ok "SSL valid, expires in $DAYS days" || warn "SSL expires in $DAYS days — renew soon!"
else
  warn "SSL cert not found"
fi

echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo -e "Checked: $(date '+%Y-%m-%d %H:%M:%S')"
echo ""
