'use client'; import { useState } from 'react'; import { Plus } from 'lucide-react'; import { Button } from '@/shared/components/ui/button'; import { Card, CardContent, CardHeader, CardTitle } from '@/shared/components/ui/card'; import { Badge } from '@/shared/components/ui/badge'; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, } from '@/shared/components/ui/dialog'; import { useRegistry } from '../hooks/use-registry'; import { RegistryFilters } from './registry-filters'; import { RegistryTable } from './registry-table'; import { RegistryEntryForm } from './registry-entry-form'; import { getOverdueDays } from '../services/registry-service'; import type { RegistryEntry } from '../types'; type ViewMode = 'list' | 'add' | 'edit'; export function RegistraturaModule() { const { entries, allEntries, loading, filters, updateFilter, addEntry, updateEntry, removeEntry, closeEntry, } = useRegistry(); const [viewMode, setViewMode] = useState('list'); const [editingEntry, setEditingEntry] = useState(null); const [closingId, setClosingId] = useState(null); const handleAdd = async (data: Omit) => { await addEntry(data); setViewMode('list'); }; const handleEdit = (entry: RegistryEntry) => { setEditingEntry(entry); setViewMode('edit'); }; const handleUpdate = async (data: Omit) => { if (!editingEntry) return; await updateEntry(editingEntry.id, data); setEditingEntry(null); setViewMode('list'); }; const handleDelete = async (id: string) => { await removeEntry(id); }; const handleCloseRequest = (id: string) => { const entry = allEntries.find((e) => e.id === id); if (entry && (entry.linkedEntryIds ?? []).length > 0) { setClosingId(id); } else { closeEntry(id, false); } }; const handleCloseConfirm = (closeLinked: boolean) => { if (closingId) { closeEntry(closingId, closeLinked); setClosingId(null); } }; const handleCancel = () => { setViewMode('list'); setEditingEntry(null); }; // Stats const total = allEntries.length; const open = allEntries.filter((e) => e.status === 'deschis').length; const overdue = allEntries.filter((e) => { if (e.status !== 'deschis') return false; const days = getOverdueDays(e.deadline); return days !== null && days > 0; }).length; const intrat = allEntries.filter((e) => e.direction === 'intrat').length; const closingEntry = closingId ? allEntries.find((e) => e.id === closingId) : null; return (
{/* Stats */}
0 ? 'destructive' : undefined} />
{viewMode === 'list' && ( <>
{!loading && (

{entries.length} din {total} înregistrări afișate

)} )} {viewMode === 'add' && ( Înregistrare nouă Nr. auto )} {viewMode === 'edit' && editingEntry && ( Editare — {editingEntry.number} )} {/* Close confirmation dialog */} { if (!open) setClosingId(null); }}> Închide înregistrarea

Această înregistrare are {closingEntry?.linkedEntryIds?.length ?? 0} înregistrări legate. Vrei să le închizi și pe acestea?

); } function StatCard({ label, value, variant }: { label: string; value: number; variant?: 'destructive' }) { return (

{label}

0 ? 'text-destructive' : ''}`}> {value}

); }