"use client" import { getApiUrl } from "@/config/api" import { useEffect, useState } from "react" import { useRouter, useParams } from "next/navigation" import { ArrowLeft, FileIcon, Upload, LogOut } from "lucide-react" import { Button } from "@/components/ui/button" import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "@/components/ui/card" import { ProtectedRoute } from "@/components/protected-route" import { FileUpload } from "@/components/file-upload" import type { Device, DeviceFile } from "@/types/device" import { ScrollArea } from "@/components/ui/scroll-area" import { getDeviceImage } from "@/components/device-images" import axios from "axios" import Image from "next/image" interface ApiCapture { id: number filename: string upload: string firmware_version: string ip: string state: string } const getDeviceById = async (deviceId: string) => { try { const deviceResponse = await axios.get(getApiUrl(`get_device_by_id/${deviceId}`)) const deviceData = deviceResponse.data const filesResponse = await axios.get(getApiUrl(`get_file_by_device/${deviceId}`)) const filesData = filesResponse.data const files: DeviceFile[] = filesData.map((file: ApiCapture) => ({ id: String(file.id), name: file.filename, uploadedAt: file.upload, firmwareVersion: file.firmware_version, ipAddress: file.ip, status: file.state === "pending" ? "pending" : "scanned", })) return { id: String(deviceData.id), name: deviceData.product.product_name, type: deviceData.product.device_type.device_type, manufacturer: deviceData.product.manufacturer.name, serialNumber: deviceData.serial, comment: deviceData.comment, lastScanned: new Date(deviceData.created).toLocaleDateString("en-GB"), files, } } catch (error) { console.error("Failed to fetch device details:", error) return null } } export default function DeviceDetailPage() { const params = useParams() const id = params?.id as string const router = useRouter() const [device, setDevice] = useState(null) const [showUpload, setShowUpload] = useState(false) useEffect(() => { const fetchDeviceDetails = async () => { const deviceDetails = await getDeviceById(id) if (!deviceDetails) { router.push("/devices") } else { setDevice(deviceDetails) } } fetchDeviceDetails() }, [id, router]) const handleViewResults = (fileId: string) => { router.push(`/scan-results?fileId=${fileId}`) } if (!device) { return
} return ( {({ logout }) => (
{!showUpload && (
{device.name} Type: {device.type} Manufacturer: {device.manufacturer} Serial Number: {device.serialNumber} {device.comment && Comment: {device.comment}} {device.lastScanned && ( Last Scanned: {device.lastScanned} )}
{device.name}
)}
{showUpload ? ( setShowUpload(false)} deviceId={id} /> ) : (

Device Files

{device.files && device.files.length > 0 ? (
{device.files.map((file) => (

{file.name}

Uploaded: {new Date(file.uploadedAt).toLocaleDateString("de-DE")}

{file.firmwareVersion &&

Firmware: {file.firmwareVersion}

} {file.ipAddress &&

IP Address: {file.ipAddress}

}
))}
) : (
No files uploaded yet. Upload a file to start scanning.
)}
)}
)}
) }