import React, { useState, useCallback, useEffect } from 'react'; import { analyzeCertificate } from './services/geminiService'; import { exportAsPdf } from './services/pdfService'; import type { ReportData } from './types'; import { Header } from './components/Header'; import { FileUpload } from './components/FileUpload'; import { Loader } from './components/Loader'; import { ReportDisplay } from './components/ReportDisplay'; import { PrintableReport } from './components/PrintableReport'; import { DownloadIcon, EyeIcon } from './components/Icons'; import { ApiKeySetup } from './components/ApiKeySetup'; const App: React.FC = () => { const [file, setFile] = useState(null); const [apiKey, setApiKey] = useState(''); const [hasKey, setHasKey] = useState(false); const [reportData, setReportData] = useState(null); const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(null); useEffect(() => { const savedApiKey = localStorage.getItem('gemini-api-key'); if (savedApiKey) { setApiKey(savedApiKey); setHasKey(true); } }, []); const handleFileChange = useCallback((selectedFile: File | null) => { setFile(selectedFile); // Reset state if file is removed if (!selectedFile) { setReportData(null); setError(null); } }, []); const handleKeySave = useCallback((key: string) => { if (key) { setApiKey(key); localStorage.setItem('gemini-api-key', key); setHasKey(true); } }, []); const handleAnalyzeClick = async () => { if (!apiKey) { setError("A chave de API não foi encontrada. Por favor, configure-a novamente."); setHasKey(false); // Force re-entry return; } if (!file) { setError("Por favor, selecione um arquivo primeiro."); return; } setIsLoading(true); setError(null); setReportData(null); try { const data = await analyzeCertificate(file, apiKey); setReportData(data); } catch (err) { if (err instanceof Error) { if (err.message.includes('API key not valid')) { setError('Erro: A chave de API fornecida não é válida. Por favor, insira uma nova chave.'); handleClearKey(); // Clear invalid key } else { setError(`Erro na análise: ${err.message}`); } } else { setError("Ocorreu um erro desconhecido durante a análise."); } } finally { setIsLoading(false); } }; const handleReset = useCallback(() => { setFile(null); setReportData(null); setIsLoading(false); setError(null); }, []); const handleClearKey = useCallback(() => { setApiKey(''); localStorage.removeItem('gemini-api-key'); setHasKey(false); handleReset(); }, [handleReset]); const handleExport = (action: 'preview' | 'download') => { if (reportData) { const fileName = `Relatorio_SteelBase_${reportData.identification.certificateNumber || 'analise'}`; exportAsPdf('printable-report-container', fileName, action); } } return (
{isLoading && }
{!hasKey ? ( ) : !reportData ? (

Análise Técnica Inteligente

Carregue seu certificado de qualidade e deixe nossa IA verificar a conformidade.

{file && ( )} {error && (

{error}

)}

IA Assistiva • Verificação profissional recomendada

) : (
)}
{/* Hidden component for PDF generation */} {reportData && ( )}
); }; export default App;