import React, { useState } from 'react'; import { Card } from '../ui/card'; import { Button } from '../ui/button'; import { Badge } from '../ui/badge'; import { SearchInput } from '../ui/input'; import { Plus, Wrench, FileText, DollarSign, Shield, Tag, Download, Activity, AlertTriangle, ShoppingBag, X, FileCheck, ClipboardList, } from 'lucide-react'; import { GearItem } from '../../types'; import { useToast } from '../../context/ToastContext'; // --- MOCK DATA --- const INVENTORY: GearItem[] = [ { id: '1', name: 'Prophet-6', category: 'Synth', brand: 'Sequential', model: 'Prophet-6 Desktop', serialNumber: 'SQ-P6-99281', purchaseDate: '2023-01-15', purchasePrice: 2499, currency: 'USD', status: 'Active', condition: 'Mint', vendor: 'Sweetwater', orderNumber: 'SW-8821002', warrantyExpire: '2025-01-15', warrantyType: 'Manufacturer', supportContact: 'support@sequential.com', image: 'https://picsum.photos/id/100/400/400', specs: { Polyphony: '6 Voices', Oscillators: '2 Discrete VCOs', Filter: 'Low-pass + High-pass', Sequencer: '64-step', }, documents: [ { name: 'User Manual', type: 'manual', url: '#', size: '4.2 MB' }, { name: 'Purchase Receipt', type: 'receipt', url: '#', size: '150 KB' }, ], }, { id: '2', name: 'Apollo Twin X', category: 'Interface', brand: 'Universal Audio', model: 'Twin X Duo', serialNumber: 'UA-TWX-2210', purchaseDate: '2022-11-20', purchasePrice: 999, currency: 'USD', status: 'Active', condition: 'Good', vendor: 'Thomann', warrantyExpire: '2023-11-20', warrantyType: 'Manufacturer', image: 'https://picsum.photos/id/101/400/400', specs: { Inputs: '2 Mic/Line', Outputs: '4 Line', Connection: 'Thunderbolt 3', DSP: 'Duo Core', }, documents: [ { name: 'Firmware v1.2', type: 'firmware', url: '#', size: '120 MB' }, ], maintenanceHistory: [ { id: 'm1', date: '2023-05-10', type: 'Cleaning', notes: 'Potentiometer de-oxidizing', cost: 0, }, ], }, { id: '3', name: 'SM7B', category: 'Microphone', brand: 'Shure', model: 'SM7B Dynamic', serialNumber: 'SH-SM7-004', purchaseDate: '2021-05-10', purchasePrice: 399, currency: 'USD', status: 'Maintenance', condition: 'Fair', vendor: 'Guitar Center', warrantyExpire: '2023-05-10', warrantyType: 'None', image: 'https://picsum.photos/id/102/400/400', notes: 'XLR connector feels loose. Sent for repair.', maintenanceHistory: [ { id: 'm2', date: '2024-02-15', type: 'Repair', notes: 'XLR Jack Replacement', cost: 45, provider: 'Local Shop', }, ], }, ]; export const GearView: React.FC = () => { const { addToast } = useToast(); const [selectedItem, setSelectedItem] = useState(null); const [filter, setFilter] = useState('All'); const [search, setSearch] = useState(''); // Filtering Logic const filteredInventory = INVENTORY.filter((item) => { const matchesFilter = filter === 'All' || item.category === filter || item.status === filter; const matchesSearch = item.name.toLowerCase().includes(search.toLowerCase()) || item.brand.toLowerCase().includes(search.toLowerCase()); return matchesFilter && matchesSearch; }); const getWarrantyStatus = (dateStr?: string) => { if (!dateStr) return { label: 'Unknown', color: 'text-kodo-content-dim', bg: 'bg-kodo-steel/10' }; const expiry = new Date(dateStr); const now = new Date(); const daysLeft = Math.ceil( (expiry.getTime() - now.getTime()) / (1000 * 60 * 60 * 24), ); if (daysLeft < 0) return { label: 'Expired', color: 'text-kodo-red', bg: 'bg-kodo-red/10' }; if (daysLeft < 90) return { label: `Expiring (${daysLeft}d)`, color: 'text-kodo-gold', bg: 'bg-kodo-gold/10', }; return { label: 'Active', color: 'text-kodo-lime', bg: 'bg-kodo-lime/10' }; }; const handleListOnMarketplace = (item: GearItem) => { addToast(`Draft listing created for ${item.brand} ${item.name}`, 'success'); setSelectedItem(null); }; return (
{/* Header */}

GEAR LOCKER

Manage hardware assets, documentation, and warranties.

{/* Filters */}
setSearch(e.target.value)} />
{[ 'All', 'Synth', 'Interface', 'Microphone', 'Active', 'Maintenance', 'Sold', ].map((f) => ( ))}
{/* Grid */}
{filteredInventory.map((item) => { const warranty = getWarrantyStatus(item.warrantyExpire); return ( setSelectedItem(item)} >
{item.status}

{item.name}

{item.brand}

S/N: {item.serialNumber}

{warranty.label} Warranty
Purchased
{item.purchaseDate}
Condition
{item.condition}
); })} {/* Add New Placeholder */}
addToast('Opens Registration Form')} > REGISTER NEW HARDWARE
{/* --- GEAR DETAIL MODAL --- */} {selectedItem && (
setSelectedItem(null)} >
{/* Modal Header */}
{selectedItem.serialNumber}

{selectedItem.name}

{selectedItem.brand} {selectedItem.model}

{/* Modal Body */}
{/* Left: Specs & Info */}
{/* Specifications */}

Specifications

{selectedItem.specs ? ( Object.entries(selectedItem.specs).map(([key, val]) => (
{key} {val}
)) ) : (

No specs available.

)}
{/* Maintenance Log */}

{' '} Maintenance & Support (SAV)

{selectedItem.status === 'Maintenance' && (
Currently in Repair
{selectedItem.notes}
)}
{selectedItem.maintenanceHistory?.map((log) => (
{log.type} {log.date}

{log.notes}

{log.cost && (
Cost: ${log.cost}
)}
))} {(!selectedItem.maintenanceHistory || selectedItem.maintenanceHistory.length === 0) && (

No maintenance history recorded.

)}
{/* Right: Purchase & Docs */}
{/* Purchase Info */}

Purchase Info

Price Paid {selectedItem.currency} {selectedItem.purchasePrice}
Date {selectedItem.purchaseDate}
Vendor {selectedItem.vendor}
{selectedItem.orderNumber && (
Order # {selectedItem.orderNumber}
)}
{/* Warranty */}

Warranty

{getWarrantyStatus(selectedItem.warrantyExpire).label}
Expires: {selectedItem.warrantyExpire || 'N/A'}
{selectedItem.supportContact && ( )}
{/* Documents */}

{' '} Documentation

{selectedItem.documents?.map((doc, i) => (
{doc.type === 'manual' ? ( ) : ( )} {doc.name}
))}
)}
); };