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 AppWPP from './components/wpp/AppWPP';
import CustomerPortal from './components/portal/CustomerPortal';
import AppLockScreen from './components/AppLockScreen';
import { convertPfx } from './utils/certConverter';
export default function App() {
const [isUnlocked, setIsUnlocked] = useState(() => {
return (
sessionStorage.getItem('inflavio_app_authenticated') === 'true' ||
localStorage.getItem('inflavio_app_authenticated') === 'true'
);
});
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 handleUnlockApp = () => {
setIsUnlocked(true);
};
const handleLockApp = () => {
sessionStorage.removeItem('inflavio_app_authenticated');
localStorage.removeItem('inflavio_app_authenticated');
setIsUnlocked(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);
};
if (!isUnlocked) {
return