#!/bin/bash
set -e

BASE="https://projectlando.net/genie/fitment/fitment_check.php"

# IMPORTANT:
# Replace NON_UNIVERSAL_ID with a real product ID that is NOT universal.
UNIVERSAL_ID="8340926693619"
NON_UNIVERSAL_ID="REPLACE_WITH_NON_UNIVERSAL_ID"
UNKNOWN_GUIDANCE_ID="REPLACE_WITH_UNKNOWN_GUIDANCE_ID"
RISK_ONLY_UNKNOWN_ID="REPLACE_WITH_RISK_ONLY_UNKNOWN_ID"
DETERMINISTIC_FITS_ID="REPLACE_WITH_DETERMINISTIC_FITS_ID"
MALFORMED_LLM_ID="REPLACE_WITH_MALFORMED_LLM_ID"

YEAR="2023"
MAKE="Chevrolet"
MODEL="Silverado 1500"

fail=0

command -v jq >/dev/null 2>&1 || { echo "jq required"; exit 1; }

echo "============================================"
echo "GENIE FITMENT HTTP REGRESSION TEST SUITE"
echo "============================================"

echo ""
echo "TEST 1 — Endpoint Responds (No Blank 500)"
echo "--------------------------------------------"

response=$(curl -s -o /dev/null -w "%{http_code}" -X POST "$BASE" \
-H "Content-Type: application/json" \
-d "{\"product_id\":$UNIVERSAL_ID,\"vehicle\":{\"year\":$YEAR,\"make\":\"$MAKE\",\"model\":\"$MODEL\"}}")

if [ "$response" != "200" ]; then
  echo "FAIL: Expected HTTP 200, got $response"
  fail=1
else
  echo "PASS: Endpoint returned 200"
fi

echo ""
echo "TEST 2 — Response Is JSON"
echo "--------------------------------------------"

json=$(curl -s -X POST "$BASE" \
-H "Content-Type: application/json" \
-d "{\"product_id\":$UNIVERSAL_ID,\"vehicle\":{\"year\":$YEAR,\"make\":\"$MAKE\",\"model\":\"$MODEL\"}}")

echo "$json" | grep -q "\"status\"" || { echo "FAIL: No status field in response"; fail=1; }
echo "$json" | grep -q "{" || { echo "FAIL: Not JSON format"; fail=1; }

if [ $fail -eq 0 ]; then
  echo "PASS: JSON structure detected"
fi

echo ""
echo "TEST 3 — Universal Unknown Should Show Guidance"
echo "--------------------------------------------"

echo "$json" | grep -q "Compatibility Guidance:" \
  && echo "PASS: Universal guidance present" \
  || { echo "FAIL: Universal guidance missing"; fail=1; }

echo ""
echo "TEST 4 — Status Must Remain Unknown"
echo "--------------------------------------------"

echo "$json" | grep -q "\"status\":\"unknown\"" \
  && echo "PASS: Status remains unknown" \
  || { echo "FAIL: Status mutated unexpectedly"; fail=1; }

echo ""
echo "TEST 5 — Non-Universal Unknown Should NOT Show Guidance"
echo "--------------------------------------------"

if [ "$NON_UNIVERSAL_ID" != "REPLACE_WITH_NON_UNIVERSAL_ID" ]; then

  non_json=$(curl -s -X POST "$BASE" \
  -H "Content-Type: application/json" \
  -d "{\"product_id\":$NON_UNIVERSAL_ID,\"vehicle\":{\"year\":$YEAR,\"make\":\"$MAKE\",\"model\":\"$MODEL\"}}")

  echo "$non_json" | grep -q "Compatibility Guidance:" \
    && { echo "FAIL: Guidance incorrectly shown for non-universal"; fail=1; } \
    || echo "PASS: No guidance for non-universal"

else
  echo "SKIPPED: Replace NON_UNIVERSAL_ID to enable this test"
fi

echo ""
echo "TEST 6 — Debug Mode Returns Structured JSON"
echo "--------------------------------------------"

debug_json=$(curl -s "$BASE?debug=1")

echo "$debug_json" | grep -q "\"status\"" \
  && echo "PASS: Debug endpoint returns JSON" \
  || { echo "FAIL: Debug endpoint not returning JSON"; fail=1; }

echo ""
echo "TEST 7 — Unknown Should Include Install Notes UL"
echo "--------------------------------------------"

URL="$BASE"
PAYLOAD="{\"product_id\":$UNIVERSAL_ID,\"vehicle\":{\"year\":$YEAR,\"make\":\"$MAKE\",\"model\":\"$MODEL\"}}"

HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" -X POST "$URL" \
  -H "Content-Type: application/json" \
  -d "$PAYLOAD")

if [ "$HTTP_CODE" != "200" ]; then
  echo "FAIL: Test 7 expected HTTP 200, got $HTTP_CODE"
  fail=1
fi

RESPONSE=$(curl -s -X POST "$URL" \
  -H "Content-Type: application/json" \
  -d "$PAYLOAD")

if ! echo "$RESPONSE" | jq . >/dev/null 2>&1; then
  echo "FAIL: Test 7 response is not valid JSON"
  fail=1
fi

STATUS=$(echo "$RESPONSE" | jq -r '.status')
EXPLANATION=$(echo "$RESPONSE" | jq -r '.explanation')

if [ "$STATUS" != "unknown" ]; then
  echo "FAIL: Test 7 expected status unknown, got $STATUS"
  fail=1
fi

echo "$EXPLANATION" | grep -q "<ul>" || { echo "FAIL: Test 7 missing <ul>"; fail=1; }
echo "$EXPLANATION" | grep -q "<li>" || { echo "FAIL: Test 7 missing <li>"; fail=1; }

if [ $fail -eq 0 ]; then
  echo "PASS: Test 7 unknown explanation contains list markup"
fi

echo ""
echo "TEST 8 — Risk Flags Should Render If Present"
echo "--------------------------------------------"

RESPONSE=$(curl -s -X POST "$URL" \
  -H "Content-Type: application/json" \
  -d "$PAYLOAD")

if ! echo "$RESPONSE" | jq . >/dev/null 2>&1; then
  echo "FAIL: Test 8 response is not valid JSON"
  fail=1
else
  EXPLANATION=$(echo "$RESPONSE" | jq -r '.explanation')
  if echo "$EXPLANATION" | grep -q "Additional considerations:"; then
    echo "$EXPLANATION" | grep -q "<ul>" || { echo "FAIL: Test 8 header appears without <ul>"; fail=1; }
    echo "$EXPLANATION" | grep -q "<li>" || { echo "FAIL: Test 8 header appears without <li>"; fail=1; }
    if [ $fail -eq 0 ]; then
      echo "PASS: Test 8 risk header includes list structure"
    fi
  else
    echo "PASS: Test 8 no risk header present (no assertion needed)"
  fi
fi

echo ""
echo "TEST 9 — Deterministic Fits Should Not Append Guidance"
echo "--------------------------------------------"

TEST9_PRODUCT_ID="$UNIVERSAL_ID"
if [ "$DETERMINISTIC_FITS_ID" != "REPLACE_WITH_DETERMINISTIC_FITS_ID" ]; then
  TEST9_PRODUCT_ID="$DETERMINISTIC_FITS_ID"
fi

TEST9_PAYLOAD="{\"product_id\":$TEST9_PRODUCT_ID,\"vehicle\":{\"year\":$YEAR,\"make\":\"$MAKE\",\"model\":\"$MODEL\"}}"
RESPONSE=$(curl -s -X POST "$URL" \
  -H "Content-Type: application/json" \
  -d "$TEST9_PAYLOAD")

if ! echo "$RESPONSE" | jq . >/dev/null 2>&1; then
  echo "FAIL: Test 9 response is not valid JSON"
  fail=1
else
  STATUS=$(echo "$RESPONSE" | jq -r '.status')
  EXPLANATION=$(echo "$RESPONSE" | jq -r '.explanation')

  if [ "$STATUS" = "fits" ]; then
    if echo "$EXPLANATION" | grep -q "<ul>"; then
      echo "FAIL: Test 9 fits explanation should not contain <ul>"
      fail=1
    fi
    if echo "$EXPLANATION" | grep -q "Additional considerations:"; then
      echo "FAIL: Test 9 fits explanation should not contain Additional considerations"
      fail=1
    fi
    if [ $fail -eq 0 ]; then
      echo "PASS: Test 9 fits explanation not polluted with guidance"
    fi
  else
    echo "SKIPPED: Test 9 status is $STATUS (not fits)"
  fi
fi

echo ""
echo "TEST 10 — JSON Integrity Always Maintained"
echo "--------------------------------------------"

RESPONSE=$(curl -s -X POST "$URL" \
  -H "Content-Type: application/json" \
  -d "$PAYLOAD")

if echo "$RESPONSE" | jq . >/dev/null 2>&1; then
  echo "PASS: Test 10 response always parses as JSON"
else
  echo "FAIL: Test 10 jq failed to parse response"
  fail=1
fi

echo ""
echo "============================================"

if [ $fail -eq 0 ]; then
  echo "ALL TESTS PASSED"
  exit 0
else
  echo "TESTS FAILED"
  exit 1
fi
