#!/usr/bin/env bash
# ==============================================================================
# test.data.sources.sh — WeatherDash 4-Tier Diagnostics Tool
#
# USAGE:
#   ./test.data.sources.sh [station_nickname]
#   Example: ./test.data.sources.sh home
# ==============================================================================

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

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

echo "=================================================================="
echo " 🌦️ WeatherDash Diagnostics Tool"
echo " Target Station : $STATION"
echo " Endpoint Base  : $BASE_URL"
echo "=================================================================="

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

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

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

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

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

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

# ------------------------------------------------------------------------------
# TEST 3: Raw Live Weather Source Check (targeted via JSON lookup)
# ------------------------------------------------------------------------------
echo "▶ [3/4] TEST 3: Live Weather Source Adapters & Date Check for '$STATION'..."

STATION_ZIP=$(python3 -c "
import urllib.request, json
try:
    req = urllib.request.urlopen(urllib.request.Request('$BASE_URL/locations.php', headers={'User-Agent': 'WeatherDash'}))
    data = json.loads(req.read().decode())
    stations = data.get('stations', {})
    target = '$STATION'.lower()
    for k, v in stations.items():
        if k.lower() == target:
            # Extract ZIP or location info if present
            print(v.get('zip', ''))
            break
except Exception as e:
    pass
")

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

if [ -n "$STATION_ZIP" ]; then
    echo "Running live-check for station '$STATION' (ZIP: $STATION_ZIP)..."
    php "$LIVE_SCRIPT" "$STATION_ZIP"
else
    echo "Running live-check for station '$STATION' via default resolver..."
    php "$LIVE_SCRIPT"
fi

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

# ------------------------------------------------------------------------------
# TEST 4: Raw Endpoint Metadata Inspection (Locations API)
# ------------------------------------------------------------------------------
echo "▶ [4/4] TEST 4: Raw Location & Source Metadata Endpoint Check..."
STATUS_RESPONSE=$(curl -k -s -w "\nHTTP_STATUS:%{http_code}" "$BASE_URL/locations.php")
STATUS_CODE=$(echo "$STATUS_RESPONSE" | grep "HTTP_STATUS" | cut -d: -f2)
STATUS_BODY=$(echo "$STATUS_RESPONSE" | sed '/HTTP_STATUS/d')

if [ "$STATUS_CODE" -eq 200 ]; then
    echo "Status: 200 OK ✅ (Locations Registry Verified)"
    echo "$STATUS_BODY" | json_pp 2>/dev/null || echo "$STATUS_BODY"
else
    echo "Status: FAILED ($STATUS_CODE) ❌"
    echo "$STATUS_BODY"
fi

echo ""
echo "=================================================================="
echo " Diagnostics completed."
echo "=================================================================="
