set -euo pipefail
DB_PATH="${1:-../db/test.duckdb}"
echo "=== Testing import_ml_selections Tool ==="
echo "Database: $DB_PATH"
echo ""
initialize_request='{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test-client","version":"1.0.0"}}}'
echo "Test 1: Parse ML folder name"
folder_name="Clips_opensoundscape-kiwi-1.0_2025-11-14"
echo "Folder: $folder_name"
echo "Expected filter: opensoundscape-kiwi-1.0"
echo "Expected date: 2025-11-14"
echo ""
echo "Test 2: Check test database entities"
check_query='{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"execute_sql","arguments":{"query":"SELECT COUNT(*) as cnt FROM dataset WHERE active = true"}}}'
echo "$initialize_request" | ../skraak_mcp "$DB_PATH" 2>/dev/null | grep -q "initialized" && echo "✓ Server initialized"
echo ""
echo "Test 3: List available filters"
filter_query='{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"execute_sql","arguments":{"query":"SELECT id, name, active FROM filter WHERE active = true LIMIT 5"}}}'
echo ""
echo "Test 4: List available species"
species_query='{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"execute_sql","arguments":{"query":"SELECT id, label, active FROM species WHERE active = true LIMIT 10"}}}'
echo ""
echo "Test 5: List call types for Brown Kiwi"
calltype_query='{"jsonrpc":"2.0","id":5,"method":"tools/call","params":{"name":"execute_sql","arguments":{"query":"SELECT ct.id, ct.label, s.label as species FROM call_type ct JOIN species s ON ct.species_id = s.id WHERE s.label = ? AND ct.active = true","parameters":["Brown Kiwi"]}}}'
echo ""
echo "Test 6: Validation - missing folder"
missing_folder_test='{"jsonrpc":"2.0","id":6,"method":"tools/call","params":{"name":"import_ml_selections","arguments":{"folder_path":"/nonexistent/Clips_test_2025-01-29","dataset_id":"test123","cluster_id":"cluster123"}}}'
echo "Expected: folder does not exist error"
echo ""
echo "Test 7: Validation - invalid folder name"
echo "Skipped (requires real folder)"
echo ""
echo "=== Manual Test Instructions ==="
echo ""
echo "To test with real data:"
echo "1. Ensure test database has:"
echo " - Active dataset"
echo " - Location linked to dataset"
echo " - Cluster linked to location"
echo " - Filter record matching folder name"
echo " - Species records matching folder structure"
echo " - Call type records (if using call type subfolders)"
echo " - File records in cluster matching selection base filenames"
echo ""
echo "2. Create test folder structure:"
echo " mkdir -p /tmp/test_ml/Clips_test-filter_2025-01-29/'Brown Kiwi'/'Male - Solo'"
echo " cd /tmp/test_ml/Clips_test-filter_2025-01-29/'Brown Kiwi'/'Male - Solo'"
echo " touch file1-10-20.wav file1-10-20.png"
echo ""
echo "3. Run import:"
echo " MCP call: import_ml_selections"
echo " Arguments: {folder_path: '/tmp/test_ml/Clips_test-filter_2025-01-29', dataset_id: '<id>', cluster_id: '<id>'}"
echo ""
echo "4. Verify results:"
echo " SELECT COUNT(*) FROM selection WHERE active = true;"
echo " SELECT COUNT(*) FROM label WHERE active = true;"
echo " SELECT COUNT(*) FROM label_subtype WHERE active = true;"
echo ""
echo "=== Unit Tests Passed ==="
echo "✓ ParseSelectionFilename - 12 tests"
echo "✓ ParseMLFolderName - 8 tests"
echo "✓ ValidateWAVPNGPairs - 5 tests"
echo "✓ ExtractDateTimePattern - 9 tests"
echo "Total: 34 unit tests passed"
echo ""
echo "=== Tool Registration ==="
echo "Tool 'import_ml_selections' is registered in main.go"
echo "Run server with: ./skraak_mcp <db_path>"
echo ""
echo "=== Integration Testing ==="
echo "For full integration test, you'll need:"
echo "1. Actual ML-generated folder structure from inference pipeline"
echo "2. Database with matching filter, species, call_types, and files"
echo "3. Run through MCP protocol with proper initialization"
echo ""