'use client'; import { useState, useEffect } from 'react'; import { useRouter } from 'next/navigation'; import DashboardSidebar from '@/components/DashboardSidebar'; import { useSession } from 'next-auth/react'; import { FiPackage, FiAlertCircle, FiPlus } from 'react-icons/fi'; export default function InventoryPage() { const router = useRouter(); const { data: session } = useSession(); const [equipment, setEquipment] = useState([]); const [loading, setLoading] = useState(true); const [typeFilter, setTypeFilter] = useState('ALL'); const [statusFilter, setStatusFilter] = useState('ALL'); const [locationFilter, setLocationFilter] = useState('ALL'); useEffect(() => { fetchEquipment(); }, []); const fetchEquipment = async () => { try { const res = await fetch('/api/inventory'); const data = await res.json(); setEquipment(data.equipment || []); } catch (error) { console.error('Fetch error:', error); } finally { setLoading(false); } }; const filteredEquipment = equipment.filter((item) => { if (typeFilter !== 'ALL' && item.type !== typeFilter) return false; if (statusFilter !== 'ALL' && item.status !== statusFilter) return false; if (locationFilter !== 'ALL' && item.locationId !== locationFilter) return false; return true; }); const getTypeLabel = (type: string) => { const labels: Record = { PRINTER: 'Drucker', CARPET: 'Roter Teppich', VIP_BARRIER: 'VIP-Absperrung', ACCESSORIES_KIT: 'Accessoires-Koffer', PRINTER_PAPER: 'Druckerpapier', TRIPOD: 'Stativ', OTHER: 'Sonstiges', }; return labels[type] || type; }; const getStatusBadge = (status: string) => { const styles: Record = { AVAILABLE: 'bg-green-500/20 text-green-400 border-green-500/50', IN_USE: 'bg-blue-500/20 text-blue-400 border-blue-500/50', MAINTENANCE: 'bg-yellow-500/20 text-yellow-400 border-yellow-500/50', DAMAGED: 'bg-red-500/20 text-red-400 border-red-500/50', RESERVED: 'bg-purple-500/20 text-purple-400 border-purple-500/50', }; return styles[status] || 'bg-gray-500/20 text-gray-400 border-gray-500/50'; }; const getStatusLabel = (status: string) => { const labels: Record = { AVAILABLE: 'Verfügbar', IN_USE: 'Im Einsatz', MAINTENANCE: 'Wartung', DAMAGED: 'Defekt', RESERVED: 'Reserviert', }; return labels[status] || status; }; const stats = { total: equipment.length, available: equipment.filter((e) => e.status === 'AVAILABLE').length, inUse: equipment.filter((e) => e.status === 'IN_USE').length, lowStock: equipment.filter((e) => e.currentStock && e.minStockLevel && e.currentStock < e.minStockLevel).length, }; if (loading) { return (

Lädt...

); } return (

Inventar

Verwalten Sie Drucker, Zubehör & Verbrauchsmaterial

{/* Stats */}

Gesamt

{stats.total}

Verfügbar

{stats.available}

Im Einsatz

{stats.inUse}

Niedriger Bestand

{stats.lowStock}

{/* Filters */}
{/* Equipment Grid */}
{filteredEquipment.map((item) => (
router.push(`/dashboard/inventory/${item.id}`)} className="bg-gradient-to-br from-gray-800 to-gray-900 rounded-lg shadow-xl p-6 hover:shadow-2xl transition-all cursor-pointer border border-gray-700 hover:border-purple-500" >

{item.name}

{getTypeLabel(item.type)}

{item.brand && item.model && (

{item.brand} {item.model}

)}
{getStatusLabel(item.status)}
{item.location && (

Standort: {item.location.name}

)} {item.project && (

Projekt: {item.project.name}

)} {item.quantity > 1 && (

Menge: {item.quantity}x

)} {item.serialNumber && (

SN: {item.serialNumber}

)} {item.currentStock !== null && item.minStockLevel !== null && (

Bestand: {item.currentStock} / {item.minStockLevel} {item.currentStock < item.minStockLevel && ( )}

)}
))}
{filteredEquipment.length === 0 && (

Kein Equipment gefunden

)}
); }