import React, { useState, useEffect } from 'react'; import { Mail, Calendar, Clock, Upload, CircleAlert, CircleCheckBig, Truck, LayoutDashboard, Key, ShieldCheck, FileSearch, Trash2, Loader2, Settings } from 'lucide-react'; import { useGrOps } from '../hooks/useGrOps'; import * as grService from '../services/grService'; import { useAuthContext } from '@/components/shared/AuthProvider'; import { toast } from 'sonner'; import { handleGrError } from '../utils/grErrorHandler'; const GrOutlookView = () => { const { userData } = useAuthContext(); const user = userData?.usuario || { username: '', email: '' }; const [dataCorte, setDataCorte] = useState(new Date().toISOString().split('T')[0]); const [assuntoFiltro, setAssuntoFiltro] = useState('NFe'); const [isProcessing, setIsProcessing] = useState(false); const [results, setResults] = useState(null); // Email Credentials State const [emailCred, setEmailCred] = useState(user.email || ''); const [passwordCred, setPasswordCred] = useState(''); const [isSavingCreds, setIsSavingCreds] = useState(false); // XML Validation State const [isValidating, setIsValidating] = useState(false); const [validationResult, setValidationResult] = useState(null); const handleSaveCredentials = async () => { if (!emailCred || !passwordCred) { toast.error("Preencha e-mail e senha"); return; } setIsSavingCreds(true); try { await grService.saveEmailCredentials(emailCred, passwordCred); toast.success("Credenciais salvas com sucesso"); setPasswordCred(''); } catch (error) { handleGrError(error, "Erro ao salvar credenciais"); } finally { setIsSavingCreds(false); } }; const handleProcessEmails = async () => { setIsProcessing(true); setResults(null); try { const resp = await grService.processEmails({ desde_data: dataCorte, assunto_filtro: assuntoFiltro, salvar_xmls: true }); setResults(resp); toast.success(`${resp.total_xmls} XMLs processados com sucesso`); } catch (error) { handleGrError(error, "Erro ao processar e-mails"); } finally { setIsProcessing(false); } }; const handleValidateXML = async (e) => { const file = e.target.files[0]; if (!file) return; setIsValidating(true); setValidationResult(null); try { const resp = await grService.validateXML(file); setValidationResult(resp); if (resp.valido) { toast.success("XML válido!"); } else { toast.error("XML inválido para o sistema"); } } catch (error) { handleGrError(error, "Erro ao validar XML"); } finally { setIsValidating(false); } }; return (
{/* Top Accent Line */}

Central de Mensagens

Ambiente Seguro de Processamento

{/* Main Controls Overlay */}
setDataCorte(e.target.value)} className="w-full pl-9 pr-4 py-2.5 bg-slate-50 dark:bg-[#222] border border-slate-200 dark:border-white/10 rounded-xl text-xs font-semibold focus:outline-none focus:border-[var(--gr-primary)] focus:ring-4 focus:ring-[var(--gr-primary)]/5 transition-all" />
setAssuntoFiltro(e.target.value)} className="w-full pl-9 pr-4 py-2.5 bg-slate-50 dark:bg-[#222] border border-slate-200 dark:border-white/10 rounded-xl text-xs font-semibold focus:outline-none focus:border-[var(--gr-primary)] focus:ring-4 focus:ring-[var(--gr-primary)]/5 transition-all" placeholder="Ex: NFe, Fatura..." />
{/* Secondary Actions */}
{validationResult && (
{validationResult.valido ? : } {validationResult.valido ? 'OK' : 'ERRO'}
)}
{/* Expandable Results Area */} {(results || isProcessing) && (

Fluxo de Dados

{results && ( CONCLUÍDO )}
{isProcessing ? (

Processando Mensagens...

) : results && (
Total XMLs {results.total_xmls}
Conta {results.email_processado}
{results.resultados.map((res, i) => (
{res.arquivo}
))}
)}
)}
); }; export default GrOutlookView;