import type { UpliftQueueItem, UpliftRequest } from "@/domain/uplifts/types/uplift"; function asRecord(raw: unknown): Record { return typeof raw === "object" && raw !== null ? (raw as Record) : {}; } function readString(record: Record, ...keys: string[]): string { for (const key of keys) { const value = record[key]; if (typeof value === "string") return value; if (typeof value === "number") return String(value); } return ""; } function readNumber(record: Record, ...keys: string[]): number | null { for (const key of keys) { const value = record[key]; if (typeof value === "number" && Number.isFinite(value)) return value; if (typeof value === "string" && value.trim() && Number.isFinite(Number(value))) { return Number(value); } } return null; } function readBool(record: Record, ...keys: string[]): boolean { return keys.some((key) => record[key] === true); } function readOptionalId( record: Record, ...keys: string[] ): string | number | null { for (const key of keys) { const value = record[key]; if (typeof value === "string" || typeof value === "number") return value; } return null; } export function mapUpliftRequest(raw: unknown): UpliftRequest { const item = asRecord(raw); return { id: readOptionalId(item, "id", "Id") ?? "", status: readString(item, "status", "Status"), currentNTE: readNumber(item, "currentNTE", "CurrentNTE"), requestedNTE: readNumber(item, "requestedNTE", "RequestedNTE") ?? 0, delta: readNumber(item, "delta", "Delta") ?? 0, vendorReason: readString(item, "vendorReason", "VendorReason"), requestedAt: readString(item, "requestedAt", "RequestedAt"), requestedByVendorName: readString(item, "requestedByVendorName", "RequestedByVendorName"), decidedAt: readString(item, "decidedAt", "DecidedAt"), decidedByName: readString(item, "decidedByName", "DecidedByName"), decisionNote: readString(item, "decisionNote", "DecisionNote"), requiredTier: readNumber(item, "requiredTier", "RequiredTier") ?? 1, canDecide: readBool(item, "canDecide", "CanDecide"), expiresAt: readString(item, "expiresAt", "ExpiresAt"), notificationStatus: readString(item, "notificationStatus", "NotificationStatus"), notificationError: readString(item, "notificationError", "NotificationError"), evidenceDocumentId: readOptionalId(item, "evidenceDocumentId", "EvidenceDocumentId"), evidenceFileName: readString(item, "evidenceFileName", "EvidenceFileName"), evidenceContentType: readString(item, "evidenceContentType", "EvidenceContentType"), evidenceSizeBytes: readNumber(item, "evidenceSizeBytes", "EvidenceSizeBytes"), }; } export function mapUpliftRequests(rawItems: unknown[]): UpliftRequest[] { return rawItems.map(mapUpliftRequest); } export function mapUpliftQueueItem(raw: unknown): UpliftQueueItem { const base = mapUpliftRequest(raw); const item = asRecord(raw); return { ...base, dispatchNumber: readString(item, "dispatchNumber", "DispatchNumber"), poNumber: readString(item, "poNumber", "PONumber"), vendorCompanyName: readString(item, "vendorCompanyName", "VendorCompanyName"), workOrderId: readOptionalId(item, "workOrderId", "WorkOrderId"), dispatchId: readOptionalId(item, "dispatchId", "DispatchId"), }; } export function mapUpliftQueueItems(rawItems: unknown[]): UpliftQueueItem[] { return rawItems.map(mapUpliftQueueItem); }