'use client' import { debugProps } from '@/lib/debug' import type { JobWithRelations } from '@/actions/jobs-page' interface FieldRowProps { label: string children: React.ReactNode } function FieldRow({ label, children }: FieldRowProps) { return (
{label} {children}
) } function formatNumber(n: number | null | undefined): string { return n != null ? n.toLocaleString('nl-NL') : '—' } function formatDuration(start: Date | null, end: Date | null): string { if (!start) return '—' const endTime = end ? new Date(end).getTime() : Date.now() const ms = endTime - new Date(start).getTime() if (ms < 0) return '—' const sec = Math.floor(ms / 1000) if (sec < 60) return `${sec}s` const min = Math.floor(sec / 60) const remSec = sec % 60 if (min < 60) return `${min}m ${remSec}s` const hr = Math.floor(min / 60) const remMin = min % 60 return `${hr}u ${remMin}m` } interface JobUsagePaneProps { job: JobWithRelations | null } export default function JobUsagePane({ job }: JobUsagePaneProps) { if (!job) { return (
Selecteer een job om gebruik te zien
) } const totalTokens = (job.inputTokens ?? 0) + (job.outputTokens ?? 0) + (job.cacheReadTokens ?? 0) + (job.cacheWriteTokens ?? 0) const costLabel = job.costUsd != null ? `$${job.costUsd.toFixed(4)}` : '—' return (
{job.modelId ?? '—'}
{formatNumber(job.inputTokens)} {formatNumber(job.outputTokens)} {formatNumber(job.cacheReadTokens)} {formatNumber(job.cacheWriteTokens)} {formatNumber(totalTokens || null)} {costLabel} {formatDuration(job.startedAt, job.finishedAt)}
) }