#!/usr/bin/env bash
# ==============================================================================
# test.data.sources.sh — WeatherDash Complete Multi-Tier Diagnostics Tool
#
# USAGE:
#   ./test.data.sources.sh [station_nickname]
#   Example: ./test.data.sources.sh home
#
# STANDALONE CURL QUICK-REFERENCE COMMANDS (HTTPS Port 8443):
#   1. Locations:  curl -k -s "https://rickweb.test:8443/weatherdash/api/weather_station/locations.php" | json_pp
#   2. Current:    curl -k -s "https://rickweb.test:8443/weatherdash/api/weather_station/current.php?station=home" | json_pp
#   3. Forecast:   curl -k -s "https://rickweb.test:8443/weatherdash/api/weather_station/forecast.php?station=home" | json_pp
#   4. Alerts:     curl -k -s "https://rickweb.test:8443/weatherdash/api/weather_station/alerts.php?station=home" | json_pp
#   5. Rainfall:   curl -k -s "https://rickweb.test:8443/weatherdash/api/weather_station/rain.php?station=home" | json_pp
# ==============================================================================

STATION=${1:-home}
BASE_URL=${WEATHER_API_BASE:-"https://rickweb.test:8443/weatherdash/api/weather_station"}

# Diagnostics Tracker Variables
TEST1_STATUS="FAIL ❌"
TEST2_STATUS="FAIL ❌"
TEST3_STATUS="FAIL ❌"
TEST4_STATUS="FAIL ❌"
TEST5_STATUS="FAIL ❌"
TEST6_STATUS="FAIL ❌"

urlencode() {
    python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "$1" 2>/dev/null || echo "$1"
}

echo "=================================================================="
echo " 🌦️ WeatherDash Full Diagnostics & Endpoint Test Suite"
echo " Target Station : $STATION"
echo " Endpoint Base  : $BASE_URL"
echo "=================================================================="

# ------------------------------------------------------------------------------
# TEST 1: Station List (locations.php)
# ------------------------------------------------------------------------------
echo ""
echo "▶ [1/6] TEST 1: Station Registry Endpoint (locations.php)..."
LOC_RESPONSE=$(curl -k -s -w "\nHTTP_STATUS:%{http_code}" "$BASE_URL/locations.php")
LOC_CODE=$(echo "$LOC_RESPONSE" | grep "HTTP_STATUS" | cut -d: -f2)
LOC_BODY=$(echo "$LOC_RESPONSE" | sed '/HTTP_STATUS/d')

if [ "$LOC_CODE" -eq 200 ]; then
    echo "Status: 200 OK ✅"
    echo "$LOC_BODY" | json_pp 2>/dev/null || echo "$LOC_BODY"
    TEST1_STATUS="PASS ✅"
else
    echo "Status: FAILED ($LOC_CODE) ❌"
    echo "$LOC_BODY"
fi

echo ""
echo "------------------------------------------------------------------"

# ------------------------------------------------------------------------------
# TEST 2: Processed Weather Data (current.php)
# ------------------------------------------------------------------------------
ENCODED_STATION=$(urlencode "$STATION")
echo "▶ [2/6] TEST 2: Current Conditions Endpoint (current.php?station=$STATION)..."
CUR_RESPONSE=$(curl -k -s -w "\nHTTP_STATUS:%{http_code}" "$BASE_URL/current.php?station=$ENCODED_STATION")
CUR_CODE=$(echo "$CUR_RESPONSE" | grep "HTTP_STATUS" | cut -d: -f2)
CUR_BODY=$(echo "$CUR_RESPONSE" | sed '/HTTP_STATUS/d')

if [ "$CUR_CODE" -eq 200 ]; then
    echo "Status: 200 OK ✅"
    echo "$CUR_BODY" | json_pp 2>/dev/null || echo "$CUR_BODY"
    TEST2_STATUS="PASS ✅"
else
    echo "Status: FAILED ($CUR_CODE) ❌"
    echo "$CUR_BODY"
fi

echo ""
echo "------------------------------------------------------------------"

# ------------------------------------------------------------------------------
# TEST 3: Forecast Endpoint (forecast.php)
# ------------------------------------------------------------------------------
echo "▶ [3/6] TEST 3: Forecast Endpoint (forecast.php?station=$STATION)..."
FCST_RESPONSE=$(curl -k -s -w "\nHTTP_STATUS:%{http_code}" "$BASE_URL/forecast.php?station=$ENCODED_STATION")
FCST_CODE=$(echo "$FCST_RESPONSE" | grep "HTTP_STATUS" | cut -d: -f2)
FCST_BODY=$(echo "$FCST_RESPONSE" | sed '/HTTP_STATUS/d')

if [ "$FCST_CODE" -eq 200 ]; then
    echo "Status: 200 OK ✅"
    echo "$FCST_BODY" | json_pp 2>/dev/null || echo "$FCST_BODY"
    TEST3_STATUS="PASS ✅"
else
    echo "Status: FAILED ($FCST_CODE) ❌"
    echo "$FCST_BODY"
fi

echo ""
echo "------------------------------------------------------------------"

# ------------------------------------------------------------------------------
# TEST 4: Weather Alerts Endpoint (alerts.php)
# ------------------------------------------------------------------------------
echo "▶ [4/6] TEST 4: Weather Alerts Endpoint (alerts.php?station=$STATION)..."
ALERT_RESPONSE=$(curl -k -s -w "\nHTTP_STATUS:%{http_code}" "$BASE_URL/alerts.php?station=$ENCODED_STATION")
ALERT_CODE=$(echo "$ALERT_RESPONSE" | grep "HTTP_STATUS" | cut -d: -f2)
ALERT_BODY=$(echo "$ALERT_RESPONSE" | sed '/HTTP_STATUS/d')

if [ "$ALERT_CODE" -eq 200 ]; then
    echo "Status: 200 OK ✅"
    echo "$ALERT_BODY" | json_pp 2>/dev/null || echo "$ALERT_BODY"
    TEST4_STATUS="PASS ✅"
else
    echo "Status: FAILED ($ALERT_CODE) ❌"
    echo "$ALERT_BODY"
fi

echo ""
echo "------------------------------------------------------------------"

# ------------------------------------------------------------------------------
# TEST 5: Dedicated Rainfall Aggregation Endpoint (rain.php)
# ------------------------------------------------------------------------------
echo "▶ [5/6] TEST 5: Dedicated Rainfall Aggregation Endpoint (rain.php?station=$STATION)..."
RAIN_RESPONSE=$(curl -k -s -w "\nHTTP_STATUS:%{http_code}" "$BASE_URL/rain.php?station=$ENCODED_STATION")
RAIN_CODE=$(echo "$RAIN_RESPONSE" | grep "HTTP_STATUS" | cut -d: -f2)
RAIN_BODY=$(echo "$RAIN_RESPONSE" | sed '/HTTP_STATUS/d')

if [ "$RAIN_CODE" -eq 200 ]; then
    echo "Status: 200 OK ✅"
    echo "$RAIN_BODY" | json_pp 2>/dev/null || echo "$RAIN_BODY"
    TEST5_STATUS="PASS ✅"
else
    echo "Status: FAILED ($RAIN_CODE) ❌"
    echo "$RAIN_BODY"
fi

echo ""
echo "------------------------------------------------------------------"

# ------------------------------------------------------------------------------
# TEST 6: Live Weather Adapter Script Check (weather.live-check.php)
# ------------------------------------------------------------------------------
echo "▶ [6/6] TEST 6: Live Weather Source Adapters Direct Diagnostics..."

LIVE_SCRIPT="/Users/rbutare/websites/apps/weather_station/weather/scripts/weather.live-check.php"

if [ -f "$LIVE_SCRIPT" ]; then
    echo "Running live adapter check..."
    php "$LIVE_SCRIPT"
    if [ $? -eq 0 ]; then
        TEST6_STATUS="PASS ✅"
    else
        TEST6_STATUS="WARN ⚠️ (Check detailed output above)"
    fi
else
    echo "Error: Live check script not found at $LIVE_SCRIPT"
    TEST6_STATUS="FAIL ❌ (Script missing)"
fi

echo ""
echo "=================================================================="
echo " 📊 DIAGNOSTICS SUMMARY REPORT"
echo "=================================================================="
echo " Target Station : $STATION"
echo " [Test 1] locations.php : $TEST1_STATUS"
echo " [Test 2] current.php   : $TEST2_STATUS"
echo " [Test 3] forecast.php  : $TEST3_STATUS"
echo " [Test 4] alerts.php    : $TEST4_STATUS"
echo " [Test 5] rain.php      : $TEST5_STATUS"
echo " [Test 6] Live Adapters : $TEST6_STATUS"
echo "=================================================================="
