import type { OptionalServiceResourceConfig, OptionalServiceResourcesMap, PricingCatalog, } from '@/types'; export type OptionalServiceKey = keyof OptionalServiceResourcesMap; const FALLBACK_OPTIONAL_RESOURCES: Record = { database: { cpuRequest: '100m', cpuLimit: '500m', memoryRequest: '256Mi', memoryLimit: '512Mi', storageGi: 1, }, redis: { cpuRequest: '50m', cpuLimit: '200m', memoryRequest: '64Mi', memoryLimit: '256Mi', storageGi: 1, }, rabbitmq: { cpuRequest: '100m', cpuLimit: '500m', memoryRequest: '256Mi', memoryLimit: '512Mi', storageGi: 2, }, }; export function optionalDefaultsFromCatalog( catalog: PricingCatalog | undefined, service: OptionalServiceKey, ): OptionalServiceResourceConfig { const profile = catalog?.optionalServices?.[service]?.profile; const fallback = FALLBACK_OPTIONAL_RESOURCES[service]; if (!profile) return { ...fallback }; return { cpuRequest: profile.cpuRequest || fallback.cpuRequest, cpuLimit: profile.cpuLimit || fallback.cpuLimit, memoryRequest: profile.memoryRequest || fallback.memoryRequest, memoryLimit: profile.memoryLimit || fallback.memoryLimit, storageGi: profile.storageGi ?? fallback.storageGi, }; } export function managedServiceTypeLabel(productType?: string): string { switch (productType) { case 'managed_database': return 'Managed Database'; case 'managed_redis': return 'Managed Redis'; case 'managed_rabbitmq': return 'Managed RabbitMQ'; default: return 'Service'; } }