use crate::domain::entities::nota::Nota; use crate::domain::entities::{ chave_serie::ChaveSerie, layout::{Layout, LayoutXlsx}, resultado_analise::{ResultadoAnalise, ResultadoPreAnalise}, }; use crate::domain::errors::ResumoAvisos; use rusqlite::Connection; use std::path::PathBuf; use std::sync::{Arc, Mutex}; /// Todos os eventos/interações da UI. #[derive(Debug, Clone)] pub enum Message { // --- Inicialização --- BancoInicializado(Result<(Arc>, bool, Vec), String>), LayoutsRecarregados(Vec), // --- Navegação --- IrParaImportacao, IrParaConfiguracaoColunas, IrParaLayouts, Voltar, // --- Arquivo --- SelecionarArquivo, ArquivoSelecionado(PathBuf), /// Arquivo arrastado e solto sobre a janela (drag-and-drop). ArquivoSolto(PathBuf), /// Arquivo está sendo arrastado sobre a janela (hover). ArquivoEmHover, /// Arquivo arrastado saiu da janela sem ser solto. ArquivoHoverSaiu, AbaSelecionada(String), // --- XLSX: abas carregadas em background --- AbaxlsxCarregadas { caminho: PathBuf, abas: Vec, layout_xlsx: LayoutXlsx, nome_layout: String, }, XlsxErroAoCarregar(String), // --- Background tasks --- AnaliseCompleta(ResultadoPendente), // --- Configuração CSV --- DelimitadorAlterado(char), EncodingAlterado(String), LinhaCabecalhoAlterada(usize), IndiceNumeroAlterado(usize), IndiceSerieAlterado(usize), IndiceValorToggle(bool), IndiceValorAlterado(usize), IndiceDataToggle(bool), IndiceDataAlterado(usize), IndiceDocTipoToggle(bool), IndiceDocTipoAlterado(usize), // --- Configuração XLSX --- AbaXlsxAlterada(String), PosNumeroAlterada(String), PosSerieAlterada(String), PosValorToggle(bool), PosValorAlterada(String), PosDataToggle(bool), PosDataAlterada(String), PosDocTipoToggle(bool), PosDocTipoAlterada(String), // --- Análise --- ExecutarImportacao, ReanalisarArquivo, ConfirmarExpansaoFaltantes, CancelarExpansao, NovaAnalise, // --- Resultado --- PaginaFaltantesAlterada(usize), PaginaDuplicatasAlterada(usize), ItensPorPaginaAlterado(usize), CopiarFaltantes(ChaveSerie), CopiarDuplicatas(ChaveSerie), ExportarPdf, PdfExportado(Result), // --- Layouts --- LayoutSelecionado(i64), SalvarLayout, NomeLayoutAlterado(String), ExcluirLayout(i64), ExclusaoConfirmada(i64), ExportarLayoutJson(i64), ImportarLayoutJson, LayoutJsonImportado(String), SobrescreverLayout(Layout), // --- Modal --- ModalTextoAlterado(String), ModalConfirmado, ModalCancelado, // --- Sem operação (used as fallback) --- Noop, } /// Resultado enviado pela task de análise em background para a UI. #[derive(Debug, Clone)] pub enum ResultadoPendente { /// Análise concluída com sucesso. Concluido { resultado: ResultadoAnalise, avisos: Option, notas: Option>, }, /// Pré-análise concluída mas precisa de confirmação do usuário. AguardandoConfirmacao { pre: ResultadoPreAnalise, series_excessivas: Vec<(ChaveSerie, u64)>, avisos: ResumoAvisos, notas: Vec, }, /// Arquivo importado não continha notas válidas. Vazio, /// Erro durante importação ou análise. Erro(String), }