import React, { useState, useMemo } from 'react'; import { Network, Layers, Search, RefreshCw, ArrowUpRight, Building, ShieldCheck, Plus, Trash2, ChevronRight, MoreVertical, X, Loader2, Terminal, Activity, Settings2, CheckCircle2, Cpu, AlertCircle } from 'lucide-react'; import { VirtualAccount } from '../types/index.ts'; import { callGemini } from '../services/geminiService.ts'; const INITIAL_MOCK_VA: VirtualAccount[] = [ { id: 'VA-88021', object: 'virtual_account', live_mode: true, created_at: '2024-02-15T10:00:00Z', updated_at: '2024-03-31T14:20:00Z', name: 'Q1 Sales Collection - UK', description: 'Virtual account for routing Sterling sales to main treasury.', counterparty_id: 'CP-8801', internal_account_id: 'IA-4401', account_details: [], routing_details: [], status: 'ACTIVE' }, { id: 'VA-90112', object: 'virtual_account', live_mode: true, created_at: '2024-03-01T09:30:00Z', updated_at: '2024-03-31T12:00:00Z', name: 'EMEA Vendor Pass-through', description: 'Temporary buffer for Eurozone contractor payments.', counterparty_id: null, internal_account_id: 'IA-9902', account_details: [], routing_details: [], status: 'ACTIVE' }, { id: 'VA-11234', object: 'virtual_account', live_mode: true, created_at: '2023-12-10T11:45:00Z', updated_at: '2024-03-25T16:00:00Z', name: 'Legacy APAC Bridge', description: 'Deprecated node being phased out.', counterparty_id: 'CP-1105', internal_account_id: 'IA-4401', account_details: [], routing_details: [], status: 'PENDING' } ]; const VirtualAccounts: React.FC = () => { const [loading, setLoading] = useState(false); const [accounts, setAccounts] = useState(INITIAL_MOCK_VA); // Modal States const [isProvisionOpen, setIsProvisionOpen] = useState(false); const [isConfigOpen, setIsConfigOpen] = useState(false); const [isReconcilerOpen, setIsReconcilerOpen] = useState(false); const [selectedVa, setSelectedVa] = useState(null); // Provisioning State const [provisioning, setProvisioning] = useState(false); const [provisionError, setProvisionError] = useState(null); const [newVa, setNewVa] = useState({ name: '', description: '', parent: 'IA-4401' }); // Reconciler State const [reconciling, setReconciling] = useState(false); const [reconcileReport, setReconcileReport] = useState(null); const refreshNodes = () => { setLoading(true); setTimeout(() => setLoading(false), 1200); }; const handleProvision = async () => { setProvisionError(null); const trimmedName = newVa.name.trim(); // 1. Client-Side Parity Check: Duplicate Names if (accounts.some(acc => acc.name.toLowerCase() === trimmedName.toLowerCase())) { setProvisionError("Node identity collision: A node with this designation already exists in the virtual mesh."); return; } setProvisioning(true); try { // 2. Artificial neural network handshake simulation await new Promise(r => setTimeout(r, 2000)); // 3. Simulated Registry-Level Validation (e.g. invalid parent or system refusal) if (trimmedName.toLowerCase() === 'fail') { throw new Error("Registry Rejection: Parent Account ID " + newVa.parent + " refused handshake authorization."); } const node: VirtualAccount = { id: `VA-${Math.floor(10000 + Math.random() * 90000)}`, object: 'virtual_account', live_mode: true, created_at: new Date().toISOString(), updated_at: new Date().toISOString(), name: trimmedName || 'Untitled Node', description: newVa.description || 'Provisioned via Quantum Foundry', counterparty_id: null, internal_account_id: newVa.parent, account_details: [], routing_details: [], status: 'ACTIVE' }; setAccounts([node, ...accounts]); setIsProvisionOpen(false); setNewVa({ name: '', description: '', parent: 'IA-4401' }); } catch (err: any) { setProvisionError(err.message || "Protocol Handshake Failure: The global registry node timed out."); } finally { setProvisioning(false); } }; const handleRunReconciler = async () => { setReconciling(true); setReconcileReport(null); try { const response = await callGemini( 'gemini-3-flash-preview', "Generate a professional 2-sentence summary for a financial reconciliation process. Mention 99.9% match accuracy and the resolution of 12 incoming virtual node signals across UK and EMEA regions. Tone: Technical and secure." ); // Fix: Access .text helper directly from the SDK response object setReconcileReport(response.text); } catch (err) { setReconcileReport("Neural reconciliation complete. Signal integrity verified at 99.9%. All ledger entries matched with zero drift."); } finally { setReconciling(false); } }; const deleteNode = (id: string) => { if (confirm("De-provision node? This will sever all incoming signal routing.")) { setAccounts(accounts.filter(a => a.id !== id)); } }; const openProvisionModal = () => { setProvisionError(null); setIsProvisionOpen(true); }; return (

Virtual Nodes

High-Volume Disbursement & Collection Layer

{accounts.map(va => (
{va.status}

{va.name}

{va.description}

Parent Registry {va.internal_account_id}
ID Segment {va.id}
Routing Layer FDX_V6_MESH
))}

Automated Reconciliation

Lumina Quantum Oracle automatically matches incoming virtual node signals to your internal accounting ledger with 99.9% precision.

{/* Provision Modal */} {isProvisionOpen && (

Provision Node

Initialize Virtual Data Sink

{provisionError && (

{provisionError}

)}
{ setProvisionError(null); setNewVa({...newVa, name: e.target.value}); }} placeholder="e.g. Q4 Marketing Buffer" className="w-full bg-black border border-zinc-800 focus:border-blue-500/50 rounded-2xl py-4 px-5 text-white text-sm outline-none transition-all placeholder:text-zinc-800 font-bold" />