import type { DomainOrderStatus } from '@/lib/domains-api'; /** * Darstellung des Auftragszustands (quick-261008-dts): Beschriftungsschluessel * und Pillen-Klassen. Die Klassen stehen als vollstaendige Zeichenketten, * damit Tailwind sie findet. */ export interface OrderLike { status: DomainOrderStatus; jobStatus: string | null; lastCheckedAt: string | null; } export interface OrderStatusInfo { /** Schluessel unter `domains.orders.status.*`. */ labelKey: string; className: string; } const OK = 'bg-status-ok/12 text-status-ok-fg'; const WARN = 'bg-status-warn/12 text-status-warn-fg'; const DOWN = 'bg-status-down/12 text-status-down-fg'; const IDLE = 'bg-status-idle/12 text-status-idle-fg'; export function orderStatusInfo(order: OrderLike): OrderStatusInfo { switch (order.status) { case 'SUCCESS': return { labelKey: 'SUCCESS', className: OK }; case 'FAILED': return { labelKey: 'FAILED', className: DOWN }; case 'UNKNOWN': return { labelKey: 'UNKNOWN', className: WARN }; case 'SUBMITTING': return { labelKey: 'SUBMITTING', className: WARN }; case 'SUBMITTED': // Eingriff bei InterNetX noetig: nicht "laeuft", sondern "Rueckfrage". return order.jobStatus === 'SUPPORT' ? { labelKey: 'SUPPORT', className: WARN } : { labelKey: 'SUBMITTED', className: WARN }; case 'CANCELED': return { labelKey: 'CANCELED', className: IDLE }; default: return { labelKey: 'DRAFT', className: IDLE }; } } /** * Wird der Auftrag noch verfolgt? Dann lohnt der regelmaessige Abgleich. Ein * unklarer Auftrag zaehlt nur, solange noch nie bei AutoDNS nachgesehen wurde — * danach wartet er auf den Benutzer und soll nicht dauernd Anfragen ausloesen. */ export function isOpen(order: OrderLike): boolean { if (order.status === 'SUBMITTING' || order.status === 'SUBMITTED') return true; return order.status === 'UNKNOWN' && order.lastCheckedAt === null; } /** Darf der Auftrag verworfen werden? (Entwurf; unklar erst nach einem Abgleich.) */ export function isDiscardable(order: OrderLike): boolean { if (order.status === 'DRAFT') return true; return order.status === 'UNKNOWN' && order.lastCheckedAt !== null; }