#!/bin/bash

# Mercury UPI PSP API Test Script
# Tests all the major API endpoints

echo "🚀 Mercury UPI PSP API Testing"
echo "================================="
echo ""

BASE_URL="http://localhost:4040"

# Test 1: Health Check
echo "1️⃣  Testing Health Check..."
curl -s "$BASE_URL/" > /dev/null
if [ $? -eq 0 ]; then
    echo "✅ Health Check: PASSED"
else
    echo "❌ Health Check: FAILED"
fi
echo ""

# Test 2: NPCI Heartbeat API
echo "2️⃣  Testing NPCI Heartbeat API..."
HEARTBEAT_RESPONSE=$(curl -s -X POST "$BASE_URL/api/v1/upi/heartbeat" \
  -H "Content-Type: application/xml" \
  -H "Accept: application/xml" \
  -d '<?xml version="1.0" encoding="UTF-8"?>
<ReqHbt>
  <Head ver="2.0" ts="2025-01-11T10:30:00+05:30" orgId="NPCI" msgId="HBT123456789012345678901234567890123"/>
</ReqHbt>')

if [[ "$HEARTBEAT_RESPONSE" == *"SUCCESS"* ]]; then
    echo "✅ NPCI Heartbeat: PASSED"
else
    echo "❌ NPCI Heartbeat: FAILED"
    echo "Response: $HEARTBEAT_RESPONSE"
fi
echo ""

# Test 3: QR Generation API
echo "3️⃣  Testing QR Generation API..."
QR_RESPONSE=$(curl -s -X POST "$BASE_URL/api/v1/qr-generate" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer test-partner-token" \
  -d '{
    "partner_id": "SINGAPORE_PARTNER_001",
    "merchant_id": "MERCHANT_SG_123",
    "amount": "100.50",
    "currency": "SGD",
    "corridor": "singapore",
    "merchant_name": "Singapore Test Merchant",
    "merchant_category": "5411",
    "purpose_code": "P0101",
    "validity_minutes": 300,
    "max_usage_count": 1,
    "metadata": {
      "invoice_id": "INV_2025_001",
      "customer_ref": "CUST_REF_123"
    }
  }')

if [[ "$QR_RESPONSE" == *"QR code generated successfully"* ]]; then
    echo "✅ QR Generation: PASSED"
    # Extract QR ID for status test
    QR_ID=$(echo "$QR_RESPONSE" | grep -o '"qr_id":"[^"]*"' | sed 's/"qr_id":"\([^"]*\)"/\1/')
    echo "   Generated QR ID: $QR_ID"
else
    echo "❌ QR Generation: FAILED"
    echo "Response: $QR_RESPONSE"
fi
echo ""

# Test 4: QR Status API (if QR was generated successfully)
if [[ -n "$QR_ID" ]]; then
    echo "4️⃣  Testing QR Status API..."
    STATUS_RESPONSE=$(curl -s -X GET "$BASE_URL/api/v1/qr-status/$QR_ID" \
      -H "Accept: application/json" \
      -H "Authorization: Bearer test-partner-token")
    
    if [[ "$STATUS_RESPONSE" == *"QR status retrieved successfully"* ]] || [[ "$STATUS_RESPONSE" == *"qr_id"* ]]; then
        echo "✅ QR Status: PASSED"
    else
        echo "❌ QR Status: FAILED"
        echo "Response: $STATUS_RESPONSE"
    fi
else
    echo "4️⃣  Skipping QR Status API (no QR ID available)"
fi
echo ""

# Test 5: FX Rate API
echo "5️⃣  Testing FX Rate API..."
FX_RESPONSE=$(curl -s -X GET "$BASE_URL/api/v1/upi/fx-rate/SGD/INR" \
  -H "Accept: application/json")

if [[ "$FX_RESPONSE" == *"from_currency"* ]] || [[ "$FX_RESPONSE" == *"SGD"* ]]; then
    echo "✅ FX Rate: PASSED"
else
    echo "❌ FX Rate: FAILED"
    echo "Response: $FX_RESPONSE"
fi
echo ""

echo "🏁 API Testing Complete!"
echo "================================="
echo ""
echo "📋 Test Summary:"
echo "- Health Check: Basic server connectivity"
echo "- NPCI Heartbeat: Core UPI API functionality"  
echo "- QR Generation: Partner API functionality"
echo "- QR Status: Status tracking functionality"
echo "- FX Rate: International currency support"
echo ""
echo "🎯 Your Mercury UPI PSP APIs are ready for Postman testing!"
