'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)}
)
}