#!/bin/bash
# health-check.sh - Check system health and update Notion
# Runs every 5 minutes via cron: */5 * * * * /home/clawd/scripts/health-check.sh

set -e

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/config.env"

TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%S.000Z")
ALERTS=""

# Function to check a system and update Notion
check_system() {
    local SYSTEM_NAME="$1"
    local CHECK_URL="$2"
    local TIMEOUT="${3:-5}"

    echo "Checking $SYSTEM_NAME..."

    # Make request and measure time
    START_TIME=$(date +%s%N)
    HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout "$TIMEOUT" --max-time "$TIMEOUT" "$CHECK_URL" 2>/dev/null || echo "000")
    END_TIME=$(date +%s%N)

    # Calculate response time in seconds
    RESPONSE_TIME=$(echo "scale=2; ($END_TIME - $START_TIME) / 1000000000" | bc)

    # Determine status
    if [ "$HTTP_CODE" = "000" ]; then
        STATUS="🔴 Down"
        NOTES="Connection failed or timeout"
    elif [ "$HTTP_CODE" -ge 200 ] && [ "$HTTP_CODE" -lt 400 ]; then
        if (( $(echo "$RESPONSE_TIME > 5" | bc -l) )); then
            STATUS="🟡 Degraded"
            NOTES="Slow response: ${RESPONSE_TIME}s"
        else
            STATUS="🟢 Online"
            NOTES="Response: ${RESPONSE_TIME}s"
        fi
    else
        STATUS="🔴 Down"
        NOTES="HTTP $HTTP_CODE"
    fi

    echo "  $SYSTEM_NAME: $STATUS ($NOTES)"

    # Find system in Notion System State database
    SEARCH_RESULT=$(curl -s -X POST "https://api.notion.com/v1/databases/${SYSTEM_STATE_DB}/query" \
        -H "Authorization: Bearer $NOTION_API_KEY" \
        -H "Content-Type: application/json" \
        -H "Notion-Version: 2022-06-28" \
        -d "{
            \"filter\": {
                \"property\": \"System\",
                \"title\": {
                    \"equals\": \"$SYSTEM_NAME\"
                }
            }
        }")

    PAGE_ID=$(echo "$SEARCH_RESULT" | jq -r '.results[0].id // empty')

    if [ -n "$PAGE_ID" ]; then
        # Update existing entry
        curl -s -X PATCH "https://api.notion.com/v1/pages/$PAGE_ID" \
            -H "Authorization: Bearer $NOTION_API_KEY" \
            -H "Content-Type: application/json" \
            -H "Notion-Version: 2022-06-28" \
            -d "{
                \"properties\": {
                    \"Status\": { \"select\": { \"name\": \"$STATUS\" } },
                    \"Last Check\": { \"date\": { \"start\": \"$TIMESTAMP\" } },
                    \"Notes\": { \"rich_text\": [{ \"text\": { \"content\": \"$NOTES\" } }] }
                }
            }" > /dev/null
    fi

    # If down, add to alerts
    if [ "$STATUS" = "🔴 Down" ]; then
        ALERTS="${ALERTS}${SYSTEM_NAME} is DOWN! "
    fi
}

# Check each system
check_system "Growth Engine" "${GROWTH_ENGINE_API}/api/health"
check_system "Main Platform" "https://app.rateright.com.au"

# VPS is up if this script is running
echo "Checking VPS..."
echo "  VPS: 🟢 Online (script running)"

# Update VPS in Notion
SEARCH_RESULT=$(curl -s -X POST "https://api.notion.com/v1/databases/${SYSTEM_STATE_DB}/query" \
    -H "Authorization: Bearer $NOTION_API_KEY" \
    -H "Content-Type: application/json" \
    -H "Notion-Version: 2022-06-28" \
    -d '{
        "filter": {
            "property": "System",
            "title": {
                "equals": "VPS"
            }
        }
    }')

PAGE_ID=$(echo "$SEARCH_RESULT" | jq -r '.results[0].id // empty')

if [ -n "$PAGE_ID" ]; then
    curl -s -X PATCH "https://api.notion.com/v1/pages/$PAGE_ID" \
        -H "Authorization: Bearer $NOTION_API_KEY" \
        -H "Content-Type: application/json" \
        -H "Notion-Version: 2022-06-28" \
        -d "{
            \"properties\": {
                \"Status\": { \"select\": { \"name\": \"🟢 Online\" } },
                \"Last Check\": { \"date\": { \"start\": \"$TIMESTAMP\" } },
                \"Notes\": { \"rich_text\": [{ \"text\": { \"content\": \"Health check script running\" } }] }
            }
        }" > /dev/null
fi

# Update Clawdbot status
"$SCRIPT_DIR/agent-status.sh" "Clawdbot" "Online" "Health check completed"

# Send alerts if any systems are down
if [ -n "$ALERTS" ]; then
    "$SCRIPT_DIR/telegram-alert.sh" "CRITICAL" "$ALERTS"
fi

echo "Health check complete at $(date)"
