#!/bin/bash

# Test script for ground information slip endpoints
# Validates that list and view responses include created_by_name

BASE_URL="https://api.captaindecision.com"
ADMIN_EMAIL="admin.test@slipstream.local"
ADMIN_PASSWORD="Test@123"

PASS=0
FAIL=0

echo "========================================="
echo "GROUND INFORMATION SLIP - created_by_name"
echo "========================================="
echo ""

# Step 1: Admin login
echo "Step 1: Admin login..."
ADMIN_LOGIN=$(curl -s -X POST "$BASE_URL/auth/login.php" \
  -H "Content-Type: application/json" \
  -d "{\"email\":\"$ADMIN_EMAIL\",\"password\":\"$ADMIN_PASSWORD\"}")

ADMIN_TOKEN=$(echo "$ADMIN_LOGIN" | grep -o '"token":"[^"]*' | sed 's/"token":"//')

if [ -z "$ADMIN_TOKEN" ]; then
    echo "FAIL: Admin login failed"
    echo "Response: $ADMIN_LOGIN"
    exit 1
fi
echo "OK: Admin logged in"
echo ""

# Step 2: Find a flight with ground information slips
echo "Step 2: Finding a flight with ground information slips..."
FLIGHT_ID=""
for fid in 1 2 3 4 5 6 7 8 9 10; do
    LIST_RESP=$(curl -s -X GET "$BASE_URL/ground-information-slip/list.php?flight_id=$fid" \
      -H "Authorization: Bearer $ADMIN_TOKEN")

    HAS_SLIPS=$(echo "$LIST_RESP" | grep -o '"ground_information_slips":\[{' | head -1)
    if [ -n "$HAS_SLIPS" ]; then
        FLIGHT_ID=$fid
        break
    fi
done

if [ -z "$FLIGHT_ID" ]; then
    echo "SKIP: No flights with ground information slips found. Cannot run tests."
    exit 0
fi
echo "OK: Using flight_id=$FLIGHT_ID"
echo ""

# =========================================================
# Test 1: list.php returns created_by_name
# =========================================================
echo "Test 1: list.php includes created_by_name..."
LIST_RESP=$(curl -s -X GET "$BASE_URL/ground-information-slip/list.php?flight_id=$FLIGHT_ID" \
  -H "Authorization: Bearer $ADMIN_TOKEN")

if echo "$LIST_RESP" | grep -q '"created_by_name"'; then
    echo "PASS: list.php response contains created_by_name"
    PASS=$((PASS + 1))
else
    echo "FAIL: list.php response missing created_by_name"
    echo "Response: $LIST_RESP"
    FAIL=$((FAIL + 1))
fi
echo ""

# Verify created_by_name is a non-empty string (not null)
CREATED_BY_NAME=$(echo "$LIST_RESP" | grep -o '"created_by_name":"[^"]*"' | head -1)
if [ -n "$CREATED_BY_NAME" ]; then
    echo "PASS: created_by_name has a value: $CREATED_BY_NAME"
    PASS=$((PASS + 1))
else
    # Could be null if user was deleted; check for the key at least
    if echo "$LIST_RESP" | grep -q '"created_by_name":null'; then
        echo "PASS: created_by_name present (null — creator may be deleted)"
        PASS=$((PASS + 1))
    else
        echo "FAIL: created_by_name value could not be parsed"
        FAIL=$((FAIL + 1))
    fi
fi
echo ""

# Verify existing fields still present
echo "Test 1b: list.php preserves existing fields..."
MISSING=""
for FIELD in ground_information_slip_id flight_id stand_number ctot created_by created_at; do
    if ! echo "$LIST_RESP" | grep -q "\"$FIELD\""; then
        MISSING="$MISSING $FIELD"
    fi
done

if [ -z "$MISSING" ]; then
    echo "PASS: All existing fields present"
    PASS=$((PASS + 1))
else
    echo "FAIL: Missing fields:$MISSING"
    FAIL=$((FAIL + 1))
fi
echo ""

# =========================================================
# Test 2: view.php returns created_by_name
# =========================================================
# Extract first slip id from list
SLIP_ID=$(echo "$LIST_RESP" | grep -o '"ground_information_slip_id":[0-9]*' | head -1 | sed 's/"ground_information_slip_id"://')

if [ -z "$SLIP_ID" ]; then
    echo "SKIP: Could not extract slip ID for view test"
else
    echo "Test 2: view.php includes created_by_name (slip_id=$SLIP_ID)..."
    VIEW_RESP=$(curl -s -X GET "$BASE_URL/ground-information-slip/view.php?id=$SLIP_ID" \
      -H "Authorization: Bearer $ADMIN_TOKEN")

    if echo "$VIEW_RESP" | grep -q '"created_by_name"'; then
        echo "PASS: view.php response contains created_by_name"
        PASS=$((PASS + 1))
    else
        echo "FAIL: view.php response missing created_by_name"
        echo "Response: $VIEW_RESP"
        FAIL=$((FAIL + 1))
    fi
    echo ""

    # Verify created_by_name value
    VIEW_NAME=$(echo "$VIEW_RESP" | grep -o '"created_by_name":"[^"]*"' | head -1)
    if [ -n "$VIEW_NAME" ]; then
        echo "PASS: view created_by_name has a value: $VIEW_NAME"
        PASS=$((PASS + 1))
    else
        if echo "$VIEW_RESP" | grep -q '"created_by_name":null'; then
            echo "PASS: view created_by_name present (null — creator may be deleted)"
            PASS=$((PASS + 1))
        else
            echo "FAIL: view created_by_name value could not be parsed"
            FAIL=$((FAIL + 1))
        fi
    fi
    echo ""

    # Verify existing view fields still present
    echo "Test 2b: view.php preserves existing fields..."
    MISSING=""
    for FIELD in ground_information_slip_id flight_id flight_number departure arrival stand_number created_by created_at; do
        if ! echo "$VIEW_RESP" | grep -q "\"$FIELD\""; then
            MISSING="$MISSING $FIELD"
        fi
    done

    if [ -z "$MISSING" ]; then
        echo "PASS: All existing view fields present"
        PASS=$((PASS + 1))
    else
        echo "FAIL: Missing view fields:$MISSING"
        FAIL=$((FAIL + 1))
    fi
    echo ""
fi

# =========================================================
# Summary
# =========================================================
echo "========================================="
echo "RESULTS: $PASS passed, $FAIL failed"
echo "========================================="

if [ "$FAIL" -gt 0 ]; then
    exit 1
fi
exit 0
