import { useState, useEffect } from 'react'; import { UploadSection } from './components/UploadSection'; import { DashboardHeader } from './components/DashboardHeader'; import { AnalyzingAnimation } from './components/AnalyzingAnimation'; import { Footer } from './components/Footer'; import { AnalysisResults } from './components/AnalysisResults'; import { ModelExplorer } from './components/ModelExplorer'; import { MarketPrices } from './components/MarketPrices'; import { AnalysisData } from './types/analysis'; import { API_BASE_URL } from './config'; function App() { const [activeTab, setActiveTab] = useState<'auditor' | 'market' | 'explorer'>('auditor'); const [isDarkMode, setIsDarkMode] = useState(true); // default to dark theme const [analysisData, setAnalysisData] = useState(null); const [isAnalyzing, setIsAnalyzing] = useState(false); const [error, setError] = useState(null); // Sync dark mode class useEffect(() => { if (isDarkMode) { document.documentElement.classList.add('dark'); } else { document.documentElement.classList.remove('dark'); } }, [isDarkMode]); const handleAnalyze = async (imageUrl: string) => { setIsAnalyzing(true); setError(null); setAnalysisData(null); try { // Direct call to local Python AI endpoint const response = await fetch(`${API_BASE_URL}/api/analyze`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ imageUrl }) }); if (!response.ok) { throw new Error(`Server returned status: ${response.status}`); } const data = await response.json(); if (data.error) throw new Error(data.error); setAnalysisData(data); } catch (err: any) { console.error(err); setError(err.message || 'Failed to connect to Python backend.'); } finally { setIsAnalyzing(false); } }; return (
{/* Unified Dashboard Header with Tab Switcher & Theme Toggle */} setActiveTab(tab)} isDarkMode={isDarkMode} setIsDarkMode={setIsDarkMode} />
{activeTab === 'auditor' && (
{/* Uploader Section */} {/* Error logs */} {error && (
Audit Failed: {error}
)} {/* AI Processing animation */} {isAnalyzing && (

Running OCR Boundary & NLP Vector Models...

)} {/* Audit Diagnostic Results */} {analysisData && !isAnalyzing && ( )}
)} {activeTab === 'market' && ( )} {activeTab === 'explorer' && ( )}
); } export default App;