#!/bin/bash

API_URL="http://localhost:8001"
USER_EMAIL="med-test-${RANDOM}@example.com"
USER_NAME="medtest${RANDOM}"

echo "=========================================="
echo "Phase 2.7 - Comprehensive API Test Suite"
echo "=========================================="
echo ""

# Test 1: Health Check
echo "🔍 Test 1: Health Check"
echo "Endpoint: GET /health"
HEALTH=$(curl -s -w "\nHTTP_CODE:%{http_code}" ${API_URL}/health)
HTTP_CODE=$(echo "$HEALTH" | grep "HTTP_CODE" | cut -d: -f2)
BODY=$(echo "$HEALTH" | sed '/HTTP_CODE/d')
echo "Response: $BODY"
echo "HTTP Status: $HTTP_CODE"
if [ "$HTTP_CODE" = "200" ]; then
  echo "✅ PASS"
else
  echo "❌ FAIL - Backend not healthy"
  exit 1
fi
echo ""

# Test 2: Register User
echo "🔍 Test 2: Register New User"
echo "Endpoint: POST /api/auth/register"
REGISTER=$(curl -s -w "\nHTTP_CODE:%{http_code}" -X POST ${API_URL}/api/auth/register \
  -H "Content-Type: application/json" \
  -d '{"email":"'${USER_EMAIL}'","username":"'${USER_NAME}'","password":"SecurePass123!","first_name":"Test","last_name":"User"}')
HTTP_CODE=$(echo "$REGISTER" | grep "HTTP_CODE" | cut -d: -f2)
BODY=$(echo "$REGISTER" | sed '/HTTP_CODE/d')
echo "Response: $BODY"
echo "HTTP Status: $HTTP_CODE"
if [ "$HTTP_CODE" = "201" ]; then
  echo "✅ PASS"
else
  echo "❌ FAIL"
fi
echo ""

# Test 3: Login - Get token properly
echo "🔍 Test 3: Login"
echo "Endpoint: POST /api/auth/login"
LOGIN_RESPONSE=$(curl -s -X POST ${API_URL}/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"'${USER_EMAIL}'","password":"SecurePass123!"}')
echo "Response: $LOGIN_RESPONSE"

# Extract token using jq or grep
TOKEN=$(echo "$LOGIN_RESPONSE" | grep -o '"token":"[^"]*' | cut -d'"' -f4)

if [ -n "$TOKEN" ]; then
  echo "✅ PASS"
  echo "Token obtained: ${TOKEN:0:30}..."
else
  echo "❌ FAIL - Could not extract token"
  exit 1
fi
echo ""

# Test 4: Create Medication with token
echo "🔍 Test 4: Create Medication"
echo "Endpoint: POST /api/medications"
echo "Using token: ${TOKEN:0:20}..."
CREATE_MED=$(curl -s -w "\nHTTP_CODE:%{http_code}" -X POST ${API_URL}/api/medications \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -d '{"profile_id":null,"name":"Lisinopril","dosage":"10mg","frequency":"once_daily","instructions":"Take with breakfast","start_date":"2026-03-01"}')
HTTP_CODE=$(echo "$CREATE_MED" | grep "HTTP_CODE" | cut -d: -f2)
BODY=$(echo "$CREATE_MED" | sed '/HTTP_CODE/d')
echo "Response: $BODY"
echo "HTTP Status: $HTTP_CODE"
if [ "$HTTP_CODE" = "201" ]; then
  echo "✅ PASS"
  MED_ID=$(echo "$BODY" | grep -o '"id":"[^"]*' | head -1 | cut -d'"' -f4)
  echo "Medication ID: $MED_ID"
else
  echo "❌ FAIL"
  MED_ID=""
fi
echo ""

# Test 5: List Medications
echo "🔍 Test 5: List Medications"
echo "Endpoint: GET /api/medications"
LIST_MEDS=$(curl -s -w "\nHTTP_CODE:%{http_code}" -X GET ${API_URL}/api/medications \
  -H "Authorization: Bearer $TOKEN")
HTTP_CODE=$(echo "$LIST_MEDS" | grep "HTTP_CODE" | cut -d: -f2)
BODY=$(echo "$LIST_MEDS" | sed '/HTTP_CODE/d')
echo "Response: $BODY"
echo "HTTP Status: $HTTP_CODE"
if [ "$HTTP_CODE" = "200" ]; then
  echo "✅ PASS"
else
  echo "❌ FAIL"
fi
echo ""

# Test 6: Get Specific Medication
if [ -n "$MED_ID" ]; then
  echo "🔍 Test 6: Get Specific Medication"
  echo "Endpoint: GET /api/medications/$MED_ID"
  GET_MED=$(curl -s -w "\nHTTP_CODE:%{http_code}" -X GET ${API_URL}/api/medications/$MED_ID \
    -H "Authorization: Bearer $TOKEN")
  HTTP_CODE=$(echo "$GET_MED" | grep "HTTP_CODE" | cut -d: -f2)
  BODY=$(echo "$GET_MED" | sed '/HTTP_CODE/d')
  echo "Response: $BODY"
  echo "HTTP Status: $HTTP_CODE"
  if [ "$HTTP_CODE" = "200" ]; then
    echo "✅ PASS"
  else
    echo "❌ FAIL"
  fi
  echo ""
fi

# Test 7: Create Health Stat
echo "🔍 Test 7: Create Health Stat"
echo "Endpoint: POST /api/health-stats"
CREATE_STAT=$(curl -s -w "\nHTTP_CODE:%{http_code}" -X POST ${API_URL}/api/health-stats \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -d '{"profile_id":null,"stat_type":"blood_pressure","value":{"systolic":120,"diastolic":80},"unit":"mmHg","recorded_at":"2026-03-08T10:00:00Z"}')
HTTP_CODE=$(echo "$CREATE_STAT" | grep "HTTP_CODE" | cut -d: -f2)
BODY=$(echo "$CREATE_STAT" | sed '/HTTP_CODE/d')
echo "Response: $BODY"
echo "HTTP Status: $HTTP_CODE"
if [ "$HTTP_CODE" = "201" ]; then
  echo "✅ PASS"
else
  echo "❌ FAIL"
fi
echo ""

# Test 8: List Health Stats
echo "🔍 Test 8: List Health Stats"
echo "Endpoint: GET /api/health-stats"
LIST_STATS=$(curl -s -w "\nHTTP_CODE:%{http_code}" -X GET ${API_URL}/api/health-stats \
  -H "Authorization: Bearer $TOKEN")
HTTP_CODE=$(echo "$LIST_STATS" | grep "HTTP_CODE" | cut -d: -f2)
BODY=$(echo "$LIST_STATS" | sed '/HTTP_CODE/d')
echo "Response: $BODY"
echo "HTTP Status: $HTTP_CODE"
if [ "$HTTP_CODE" = "200" ]; then
  echo "✅ PASS"
else
  echo "❌ FAIL"
fi
echo ""

# Test 9: Get Health Trends
echo "🔍 Test 9: Get Health Trends"
echo "Endpoint: GET /api/health-stats/trends?stat_type=blood_pressure&period=7d"
TRENDS=$(curl -s -w "\nHTTP_CODE:%{http_code}" -X GET "${API_URL}/api/health-stats/trends?stat_type=blood_pressure&period=7d" \
  -H "Authorization: Bearer $TOKEN")
HTTP_CODE=$(echo "$TRENDS" | grep "HTTP_CODE" | cut -d: -f2)
BODY=$(echo "$TRENDS" | sed '/HTTP_CODE/d')
echo "Response: $BODY"
echo "HTTP Status: $HTTP_CODE"
if [ "$HTTP_CODE" = "200" ]; then
  echo "✅ PASS"
else
  echo "❌ FAIL"
fi
echo ""

# Test 10: Unauthorized Access
echo "🔍 Test 10: Unauthorized Access (No Token)"
echo "Endpoint: GET /api/medications"
UNAUTH=$(curl -s -w "\nHTTP_CODE:%{http_code}" -X GET ${API_URL}/api/medications)
HTTP_CODE=$(echo "$UNAUTH" | grep "HTTP_CODE" | cut -d: -f2)
echo "HTTP Status: $HTTP_CODE"
if [ "$HTTP_CODE" = "401" ]; then
  echo "✅ PASS - Correctly blocked unauthorized access"
else
  echo "❌ FAIL - Should return 401"
fi
echo ""

# Test 11: Get User Profile
echo "🔍 Test 11: Get User Profile"
echo "Endpoint: GET /api/users/me"
PROFILE=$(curl -s -w "\nHTTP_CODE:%{http_code}" -X GET ${API_URL}/api/users/me \
  -H "Authorization: Bearer $TOKEN")
HTTP_CODE=$(echo "$PROFILE" | grep "HTTP_CODE" | cut -d: -f2)
BODY=$(echo "$PROFILE" | sed '/HTTP_CODE/d')
echo "Response: $BODY"
echo "HTTP Status: $HTTP_CODE"
if [ "$HTTP_CODE" = "200" ]; then
  echo "✅ PASS"
else
  echo "❌ FAIL"
fi
echo ""

# Test 12: Get Sessions
echo "🔍 Test 12: Get User Sessions"
echo "Endpoint: GET /api/sessions"
SESSIONS=$(curl -s -w "\nHTTP_CODE:%{http_code}" -X GET ${API_URL}/api/sessions \
  -H "Authorization: Bearer $TOKEN")
HTTP_CODE=$(echo "$SESSIONS" | grep "HTTP_CODE" | cut -d: -f2)
BODY=$(echo "$SESSIONS" | sed '/HTTP_CODE/d')
echo "Response: $BODY"
echo "HTTP Status: $HTTP_CODE"
if [ "$HTTP_CODE" = "200" ]; then
  echo "✅ PASS"
else
  echo "❌ FAIL"
fi
echo ""

echo "=========================================="
echo "✅ All Tests Complete!"
echo "=========================================="
