import React, { useState } from 'react'; import { ShieldCheck, ArrowRight, RotateCcw, AlertCircle, Sparkles, Lock, Loader2, MessageSquare, Bookmark } from 'lucide-react'; import Header from './components/Header'; import SecurityBadge from './components/SecurityBadge'; import UploadZone from './components/UploadZone'; import PasswordInput from './components/PasswordInput'; import CertificateInfo from './components/CertificateInfo'; import OutputFiles from './components/OutputFiles'; import OpenSslReference from './components/OpenSslReference'; import HostGuideModal from './components/HostGuideModal'; import AppWPP from './components/wpp/AppWPP'; import CustomerPortal from './components/portal/CustomerPortal'; import { convertPfx } from './utils/certConverter'; export default function App() { const [activeTab, setActiveTab] = useState('portal'); // 'portal' | 'cert' | 'wpp' (default to portal since user asked for it!) const [file, setFile] = useState(null); const [arrayBuffer, setArrayBuffer] = useState(null); const [baseName, setBaseName] = useState('certificado'); const [password, setPassword] = useState(''); const [isConverting, setIsConverting] = useState(false); const [conversionResult, setConversionResult] = useState(null); const [errorMessage, setErrorMessage] = useState(''); const [isHostingGuideOpen, setIsHostingGuideOpen] = useState(false); // Manipula seleção de arquivo .pfx const handleFileSelected = (selectedFile) => { setFile(selectedFile); setConversionResult(null); setErrorMessage(''); // Extrai nome base sem a extensão const nameWithoutExt = selectedFile.name.replace(/\.[^/.]+$/, ''); setBaseName(nameWithoutExt || 'certificado'); // Lê os bytes brutos do arquivo const reader = new FileReader(); reader.onload = (e) => { setArrayBuffer(e.target.result); }; reader.onerror = () => { setErrorMessage('Falha ao ler o arquivo selecionado no seu computador.'); }; reader.readAsArrayBuffer(selectedFile); }; // Limpa tudo para recomeçar const handleFileCleared = () => { setFile(null); setArrayBuffer(null); setPassword(''); setConversionResult(null); setErrorMessage(''); setBaseName('certificado'); }; // Executa a conversão criptográfica const handleConvert = () => { if (!arrayBuffer) { setErrorMessage('Por favor, selecione um arquivo de certificado .pfx primeiro.'); return; } setIsConverting(true); setErrorMessage(''); // Executa em pequeno timeout para permitir renderizar o estado de carregamento setTimeout(() => { try { const result = convertPfx(arrayBuffer, password); if (result.success) { setConversionResult(result); setErrorMessage(''); } else { setConversionResult(null); setErrorMessage(result.error); } } catch (err) { setConversionResult(null); setErrorMessage('Ocorreu um erro inesperado ao converter: ' + (err.message || '')); } finally { setIsConverting(false); } }, 80); }; return (