#!/bin/bash
# Test MCP resources (schema resources)
# Usage: ./test_resources.sh [db_path]
# Default: uses test.duckdb (read-only tests)

source "$(dirname "$0")/test_lib.sh"

DB_PATH="${1:-$DEFAULT_TEST_DB}"

if [ ! -f "$DB_PATH" ]; then
    echo -e "${RED}Error: Database not found at $DB_PATH${NC}"
    exit 1
fi

echo "=== Testing MCP Resources ==="
echo "Database: $DB_PATH"
echo ""

check_binary

# Test 1: List resources
echo "Test 1: List resources"
result=$(send_request "resources/list" '{}' "$DB_PATH")
run_test "List resources" "true" "$result"

# Test 2: List resource templates
echo ""
echo "Test 2: List resource templates"
result=$(send_request "resources/templates/list" '{}' "$DB_PATH")
run_test "List resource templates" "true" "$result"

# Test 3: Read full schema
echo ""
echo "Test 3: Read full schema"
result=$(send_request "resources/read" '{"uri":"schema://full"}' "$DB_PATH")
run_test "Read full schema" "true" "$result"

# Check schema length
schema_text=$(echo "$result" | jq -r '.result.contents[0].text // empty')
if [ -n "$schema_text" ]; then
    lines=$(echo "$schema_text" | wc -l)
    echo "  Schema lines: $lines"
fi

# Test 4: Read dataset table schema
echo ""
echo "Test 4: Read dataset table schema"
result=$(send_request "resources/read" '{"uri":"schema://table/dataset"}' "$DB_PATH")
run_test "Read dataset schema" "true" "$result"

# Test 5: Read location table schema
echo ""
echo "Test 5: Read location table schema"
result=$(send_request "resources/read" '{"uri":"schema://table/location"}' "$DB_PATH")
run_test "Read location schema" "true" "$result"

# Test 6: Read file table schema
echo ""
echo "Test 6: Read file table schema"
result=$(send_request "resources/read" '{"uri":"schema://table/file"}' "$DB_PATH")
run_test "Read file schema" "true" "$result"

# Test 7: Invalid table name (should succeed but return error message)
echo ""
echo "Test 7: Invalid table name"
result=$(send_request "resources/read" '{"uri":"schema://table/nonexistent_table"}' "$DB_PATH")
# Resources return top-level error for invalid URIs
if echo "$result" | jq -e '.error' >/dev/null 2>&1; then
    echo -e "${GREEN}${NC} Invalid table name handled correctly"
    ((TESTS_RUN++)) || true
    ((TESTS_PASSED++)) || true
else
    echo -e "${RED}${NC} Invalid table name should return error"
    ((TESTS_RUN++)) || true
    ((TESTS_FAILED++)) || true
fi

echo ""
print_summary