"use client" import { Card } from "@/components/ui/card" import { Badge } from "@/components/ui/badge" import { Progress } from "@/components/ui/progress" import { Thermometer, CpuIcon, ChevronDown, ChevronUp, Zap } from "lucide-react" import useSWR from "swr" import { useState } from "react" import { type HardwareData, fetcher } from "@/types/hardware" const getDeviceTypeColor = (type: string): string => { const lowerType = type.toLowerCase() if (lowerType.includes("storage") || lowerType.includes("sata") || lowerType.includes("raid")) { return "bg-orange-500/10 text-orange-500 border-orange-500/20" } if (lowerType.includes("usb")) { return "bg-purple-500/10 text-purple-500 border-purple-500/20" } if (lowerType.includes("network") || lowerType.includes("ethernet")) { return "bg-blue-500/10 text-blue-500 border-blue-500/20" } if (lowerType.includes("graphics") || lowerType.includes("vga") || lowerType.includes("display")) { return "bg-green-500/10 text-green-500 border-green-500/20" } return "bg-gray-500/10 text-gray-500 border-gray-500/20" } export default function Hardware() { const { data: hardwareData, error } = useSWR("/api/hardware", fetcher, { refreshInterval: 5000, }) const [expandedPCIDevice, setExpandedPCIDevice] = useState(null) return (
{/* Thermal Monitoring */} {hardwareData?.temperatures && hardwareData.temperatures.length > 0 && (

Thermal Monitoring

{hardwareData.temperatures.length} sensors
{hardwareData.temperatures.map((temp, index) => { const percentage = temp.critical > 0 ? (temp.current / temp.critical) * 100 : (temp.current / 100) * 100 const isHot = temp.current > (temp.high || 80) const isCritical = temp.current > (temp.critical || 90) return (
{temp.name} {temp.current.toFixed(1)}°C
{temp.adapter && {temp.adapter}}
) })}
)} {hardwareData?.power_meter && (

Power Consumption

{hardwareData.power_meter.name}

{hardwareData.power_meter.adapter && (

{hardwareData.power_meter.adapter}

)}

{hardwareData.power_meter.watts.toFixed(1)} W

Current Draw

)} {/* Network Summary */} {/* Storage Summary */} {/* PCI Devices */} {hardwareData?.pci_devices && hardwareData.pci_devices.length > 0 && (

PCI Devices

{hardwareData.pci_devices.length} devices
{hardwareData.pci_devices.map((device, index) => { const deviceKey = `${device.slot}-${index}` const isExpanded = expandedPCIDevice === deviceKey return (
setExpandedPCIDevice(isExpanded ? null : deviceKey)} className="flex cursor-pointer items-start justify-between p-4 transition-colors hover:bg-background/80" >
{device.type} {device.slot}

{device.device}

{device.vendor}

{isExpanded ? ( ) : ( )}
{isExpanded && (
Device Type {device.type}
PCI Slot {device.slot}
Device Name {device.device}
Vendor {device.vendor}
Class {device.class}
{device.driver && (
Driver {device.driver}
)} {device.kernel_module && (
Kernel Module {device.kernel_module}
)} {device.irq && (
IRQ {device.irq}
)} {device.memory_address && (
Memory Address {device.memory_address}
)} {device.link_speed && (
Link Speed {device.link_speed}
)} {device.capabilities && device.capabilities.length > 0 && (
Capabilities
{device.capabilities.map((cap, idx) => ( {cap} ))}
)}
)}
) })}
)} {/* ... existing code for Fans, Power Supply, UPS sections ... */}
) }