#!/bin/bash
# External uptime monitor for agentforms.io
# Run as cron on a separate host (e.g., Hetzner VPS)
# Sends alerts via Telegram if health check fails

HEALTH_URL="${HEALTH_URL:-https://agentforms.io/health/ready}"
TIMEOUT=10
ALERT_COOLDOWN=300  # 5 minutes between alerts

# Check for alert cooldown file
LAST_ALERT_FILE="/tmp/agentforms_last_alert"
if [ -f "$LAST_ALERT_FILE" ]; then
    LAST_ALERT=$(cat "$LAST_ALERT_FILE")
    NOW=$(date +%s)
    ELAPSED=$((NOW - LAST_ALERT))
    if [ "$ELAPSED" -lt "$ALERT_COOLDOWN" ]; then
        exit 0
    fi
fi

# Health check
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" --max-time "$TIMEOUT" "$HEALTH_URL" 2>/dev/null)

if [ "$HTTP_CODE" -ge 200 ] && [ "$HTTP_CODE" -lt 300 ]; then
    # Service is healthy
    exit 0
else
    # Service is unhealthy — record alert time
    date +%s > "$LAST_ALERT_FILE"

    # Build alert message
    TIMESTAMP=$(date -u +"%Y-%m-%d %H:%M:%S UTC")
    ALERT_MSG="🔴 AgentForms DOWN\nHost: agentforms.io\nTime: ${TIMESTAMP}\nHTTP: ${HTTP_CODE:-timeout}"

    # Send via Telegram if configured
    if [ -n "$TELEGRAM_BOT_TOKEN" ] && [ -n "$TELEGRAM_CHAT_ID" ]; then
        curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
            -H "Content-Type: application/json" \
            -d "{\"chat_id\":\"${TELEGRAM_CHAT_ID}\",\"text\":\"${ALERT_MSG}\",\"parse_mode\":\"Markdown\"}" \
            --max-time 10 > /dev/null 2>&1
    fi

    # Log to stdout
    echo "$(date -u +%Y-%m-%dT%H:%M:%SZ) ALERT: agentforms.io returned HTTP ${HTTP_CODE:-timeout}" >&2
    exit 1
fi