import type { ProtocolStepStatus, ProtocolStepType, ScheduleEventStatus, } from '../types' import type { InstrumentRunItem, InstrumentRunItemKind, InstrumentRunStatus, } from './types' export function instrumentRunStepType(kind: InstrumentRunItemKind): ProtocolStepType { switch (kind) { case 'wash': return 'wash' case 'blank': case 'qc': case 'standard': case 'calibration': case 'sample': return 'measurement' default: return 'custom' } } export function instrumentRunStepStatus(status: InstrumentRunStatus): ProtocolStepStatus { switch (status) { case 'running': return 'in_progress' case 'completed': return 'completed' case 'failed': return 'failed' case 'skipped': return 'skipped' case 'planned': case 'queued': default: return 'pending' } } export function instrumentRunScheduleStatus(status: InstrumentRunStatus): ScheduleEventStatus { switch (status) { case 'running': return 'in-progress' case 'completed': return 'confirmed' case 'failed': case 'skipped': return 'cancelled' case 'planned': case 'queued': default: return 'pending' } } export function instrumentRunScheduleColor(kind: InstrumentRunItem['kind']): string { switch (kind) { case 'blank': return '#64748b' case 'qc': return '#8b5cf6' case 'standard': case 'calibration': return '#f59e0b' case 'wash': return '#06b6d4' case 'sample': return '#2563eb' default: return '#475569' } } export function dateFromMetadata( metadata: Record | undefined, keys: readonly string[] ): Date | undefined { if (!metadata) return undefined for (const key of keys) { const value = metadata[key] if (!(typeof value === 'string' || value instanceof Date)) continue const date = new Date(value) if (!Number.isNaN(date.getTime())) return date } return undefined } export function addMinutes(date: Date, minutes: number): Date { return new Date(date.getTime() + minutes * 60_000) }