/* Copyright (C) 2023-2026 QuantumNous This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . For commercial licensing, please contact support@quantumnous.com */ export function normalizeDeploymentStatus(status: unknown) { return typeof status === 'string' ? status.trim().toLowerCase() : '' } export function formatRemainingMinutes(mins: unknown) { const n = typeof mins === 'string' ? Number(mins) : typeof mins === 'number' ? mins : NaN if (!Number.isFinite(n)) return null const total = Math.max(0, Math.round(n)) const days = Math.floor(total / 1440) const hours = Math.floor((total % 1440) / 60) const minutes = total % 60 const parts: string[] = [] if (days > 0) parts.push(`${days}d`) if (hours > 0) parts.push(`${hours}h`) if (parts.length === 0 || minutes > 0) parts.push(`${minutes}m`) return parts.join(' ') }