"use client"; import { processInboxItemAction } from "@/app/(dashboard)/caixa-de-entrada/actions"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Textarea } from "@/components/ui/textarea"; import { useCallback, useEffect, useState } from "react"; import { toast } from "sonner"; import type { InboxItem, SelectOption } from "./types"; interface ProcessDialogProps { open: boolean; onOpenChange: (open: boolean) => void; item: InboxItem | null; categorias: SelectOption[]; contas: SelectOption[]; cartoes: SelectOption[]; } export function ProcessDialog({ open, onOpenChange, item, categorias, contas, cartoes, }: ProcessDialogProps) { const [loading, setLoading] = useState(false); // Form state const [name, setName] = useState(""); const [amount, setAmount] = useState(""); const [purchaseDate, setPurchaseDate] = useState(""); const [transactionType, setTransactionType] = useState<"Despesa" | "Receita">( "Despesa" ); const [condition, setCondition] = useState("realizado"); const [paymentMethod, setPaymentMethod] = useState("cartao-credito"); const [categoriaId, setCategoriaId] = useState(""); const [contaId, setContaId] = useState(""); const [cartaoId, setCartaoId] = useState(""); const [note, setNote] = useState(""); // Pré-preencher com dados parseados useEffect(() => { if (item) { setName(item.parsedName || ""); setAmount(item.parsedAmount || ""); setPurchaseDate( item.parsedDate ? new Date(item.parsedDate).toISOString().split("T")[0] : new Date(item.notificationTimestamp).toISOString().split("T")[0] ); setTransactionType( (item.parsedTransactionType as "Despesa" | "Receita") || "Despesa" ); setCondition("realizado"); setPaymentMethod(item.parsedCardLastDigits ? "cartao-credito" : "outros"); setCategoriaId(""); setContaId(""); setCartaoId(""); setNote(""); } }, [item]); // Por enquanto, mostrar todas as categorias // Em produção, seria melhor filtrar pelo tipo (Despesa/Receita) const filteredCategorias = categorias; const handleSubmit = useCallback(async () => { if (!item) return; if (!categoriaId) { toast.error("Selecione uma categoria."); return; } if (paymentMethod === "cartao-credito" && !cartaoId) { toast.error("Selecione um cartão."); return; } if (paymentMethod !== "cartao-credito" && !contaId) { toast.error("Selecione uma conta."); return; } setLoading(true); try { const result = await processInboxItemAction({ inboxItemId: item.id, name, amount: parseFloat(amount), purchaseDate, transactionType, condition, paymentMethod, categoriaId, contaId: paymentMethod !== "cartao-credito" ? contaId : undefined, cartaoId: paymentMethod === "cartao-credito" ? cartaoId : undefined, note: note || undefined, }); if (result.success) { toast.success(result.message); onOpenChange(false); } else { toast.error(result.error); } } finally { setLoading(false); } }, [ item, name, amount, purchaseDate, transactionType, condition, paymentMethod, categoriaId, contaId, cartaoId, note, onOpenChange, ]); if (!item) return null; return ( Processar Notificação Revise os dados extraídos e complete as informações para criar o lançamento.
{/* Texto original */}

Notificação original:

{item.originalText}

{/* Nome/Descrição */}
setName(e.target.value)} placeholder="Ex: Supermercado, Uber, etc." />
{/* Valor e Data */}
setAmount(e.target.value)} placeholder="0,00" />
setPurchaseDate(e.target.value)} />
{/* Tipo de transação */}
{/* Forma de pagamento */}
{/* Cartão ou Conta */} {paymentMethod === "cartao-credito" ? (
) : (
)} {/* Categoria */}
{/* Condição */}
{/* Notas */}