#!/bin/bash
#
# Cloudflare Security Monitor - Mobile Client (Termux)
# Displays: Country | Firewall Events | Top Origin Request Sites
#

API_URL="https://10years.websnoogie.com/api/cloudflare-security.json"

# ANSI Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
MAGENTA='\033[0;35m'
BOLD='\033[1m'
NC='\033[0m'

while true; do
    clear
    
    # Fetch data
    DATA=$(curl -s "$API_URL")
    
    if [ $? -ne 0 ] || [ -z "$DATA" ]; then
        echo -e "${RED}ERROR: Cannot fetch data from API${NC}"
        sleep 30
        continue
    fi
    
    # Extract data
    UPDATED=$(echo "$DATA" | jq -r '.updated_at')
    TOTAL=$(echo "$DATA" | jq -r '.statistics.total_incidents')
    RATE=$(echo "$DATA" | jq -r '.statistics.incidents_per_hour')
    BASELINE=$(echo "$DATA" | jq -r '.statistics.baseline_avg')
    ZONES=$(echo "$DATA" | jq -r '.statistics.zone_count')
    ALERT_LEVEL=$(echo "$DATA" | jq -r '.alert.level')
    ALERT_MSG=$(echo "$DATA" | jq -r '.alert.message')
    
    COUNTRIES=$(echo "$DATA" | jq -r '.top_countries')
    ORIGINS=$(echo "$DATA" | jq -r '.top_origin_requests')
    
    # Header
    echo -e "${BOLD}${CYAN}╔═══════════════════════════════════════════════════════════════╗${NC}"
    echo -e "${BOLD}${CYAN}║     CLOUDFLARE SECURITY & ORIGIN REQUEST MONITOR             ║${NC}"
    echo -e "${BOLD}${CYAN}╚═══════════════════════════════════════════════════════════════╝${NC}"
    echo ""
    
    # Alert banner
    if [ "$ALERT_LEVEL" = "critical" ]; then
        echo -e "${RED}${BOLD}🔴 CRITICAL ALERT: $ALERT_MSG${NC}"
        echo ""
    elif [ "$ALERT_LEVEL" = "warning" ]; then
        echo -e "${YELLOW}${BOLD}⚠️  WARNING: $ALERT_MSG${NC}"
        echo ""
    elif [ "$ALERT_LEVEL" = "elevated" ]; then
        echo -e "${YELLOW}📊 ELEVATED: $ALERT_MSG${NC}"
        echo ""
    fi
    
    # Statistics
    echo -e "${BOLD}Statistics:${NC}"
    echo -e "  Zones: ${BOLD}$ZONES${NC} | Total: ${BOLD}$TOTAL${NC} | Rate: ${BOLD}$RATE/hr${NC} | Baseline: ${BOLD}$BASELINE/hr${NC}"
    echo -e "  Updated: ${CYAN}$UPDATED${NC}"
    echo ""
    
    # Three-column header
    echo -e "${BOLD}${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
    printf "${BOLD}%-8s %10s    %-35s %8s${NC}\n" "COUNTRY" "FIREWALL" "ORIGIN SITE" "REQUESTS"
    echo -e "${BOLD}${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
    
    # Display top 10 rows
    for i in {0..9}; do
        # Get country data
        COUNTRY=$(echo "$COUNTRIES" | jq -r ".[$i].country_code // \"--\"")
        FW_COUNT=$(echo "$COUNTRIES" | jq -r ".[$i].count // 0")
        
        # Get origin data
        HOSTNAME=$(echo "$ORIGINS" | jq -r ".[$i].hostname // \"--\"")
        ORIGIN_COUNT=$(echo "$ORIGINS" | jq -r ".[$i].count // 0")
        
        # Truncate hostname if too long
        if [ ${#HOSTNAME} -gt 35 ]; then
            HOSTNAME="${HOSTNAME:0:32}..."
        fi
        
        # Color code firewall counts
        if [ "$FW_COUNT" -gt 50000 ]; then
            FW_COLOR=$RED
        elif [ "$FW_COUNT" -gt 10000 ]; then
            FW_COLOR=$YELLOW
        else
            FW_COLOR=$GREEN
        fi
        
        # Color code origin counts
        if [ "$ORIGIN_COUNT" -gt 1000 ]; then
            OR_COLOR=$RED
        elif [ "$ORIGIN_COUNT" -gt 500 ]; then
            OR_COLOR=$YELLOW
        else
            OR_COLOR=$GREEN
        fi
        
        # Print row
        printf "%-8s ${FW_COLOR}%10s${NC}    %-35s ${OR_COLOR}%8s${NC}\n" \
            "$COUNTRY" "$FW_COUNT" "$HOSTNAME" "$ORIGIN_COUNT"
    done
    
    echo -e "${BOLD}${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
    echo ""
    
    # Legend
    echo -e "${BOLD}Legend:${NC}"
    echo -e "  ${GREEN}●${NC} Low (<10k FW / <500 Origin)  ${YELLOW}●${NC} Medium  ${RED}●${NC} High (>50k FW / >1k Origin)"
    echo ""
    echo -e "${CYAN}Refreshing in 30 seconds... (Ctrl+C to exit)${NC}"
    
    sleep 30
done