import React, { useState, useEffect, useCallback } from 'react'; import { supabase, runDatabaseSelfTest, testStorageConnection } from '../services/supabaseClient'; import { ServerIcon } from './icons/ServerIcon'; import { LoadingSpinner } from './LoadingSpinner'; type TestStatus = 'idle' | 'testing' | 'success' | 'error'; interface DatabaseControlsProps { onReady: () => void; } export const DatabaseControls: React.FC = ({ onReady }) => { const [status, setStatus] = useState('idle'); const [message, setMessage] = useState(''); const [hasRunAutoTest, setHasRunAutoTest] = useState(false); const handleTestConnection = useCallback(async () => { setStatus('testing'); setMessage(''); try { // Test 1: Full Database CRUD Self-Test const dbResult = await runDatabaseSelfTest(); if (!dbResult.success) { setStatus('error'); setMessage(dbResult.error || 'An unknown database error occurred.'); return; } // Test 2: Storage Write/Delete const storageResult = await testStorageConnection(); if (!storageResult.success) { setStatus('error'); setMessage(storageResult.error || 'An unknown storage error occurred.'); return; } // All tests passed setStatus('success'); setMessage('Connection successful! Database and Storage are working correctly.'); // Reset after a few seconds if it was a manual test setTimeout(() => { if (status !== 'testing') { setStatus('idle'); setMessage(''); } }, 8000); } finally { // This is the crucial step: always signal readiness after the test sequence completes. onReady(); } }, [status, onReady]); // Auto-run the test once on initial connection useEffect(() => { if (supabase && !hasRunAutoTest) { setHasRunAutoTest(true); handleTestConnection(); } }, [supabase, hasRunAutoTest, handleTestConnection]); if (!supabase) { return null; // Don't render anything if Supabase is not configured } const statusText = status === 'success' ? 'OK' : status === 'error' ? 'Error' : status === 'testing' ? 'Testing...' : 'Connected'; const statusColor = status === 'success' ? 'text-green-600 dark:text-green-400' : status === 'error' ? 'text-red-600 dark:text-red-400' : 'text-gray-600 dark:text-gray-400'; return (

Backend Status

Status: {statusText}. The self-test checks all database permissions.

{message && (
{message}
)}
); };