using AxCopilot.Services; namespace AxCopilot.Services.Agent; internal static class OperationalStatusPresentationCatalog { public static AppStateService.OperationalStatusPresentationState Resolve( AppStateService.OperationalStatusState status, string tab, bool hasLiveRuntimeActivity, int runningConversationCount, int spotlightConversationCount, bool runningOnlyFilter, bool sortConversationsByRecent) { var showCompactStrip = !string.Equals(tab, "Chat", StringComparison.OrdinalIgnoreCase) && (string.Equals(status.StripKind, "permission_waiting", StringComparison.OrdinalIgnoreCase) || string.Equals(status.StripKind, "failed_run", StringComparison.OrdinalIgnoreCase) || string.Equals(status.StripKind, "permission_denied", StringComparison.OrdinalIgnoreCase)); var (stripBackgroundHex, stripBorderHex, stripForegroundHex) = ResolveStripColors(status.StripKind, showCompactStrip); var allowQuickStrip = !string.Equals(tab, "Chat", StringComparison.OrdinalIgnoreCase); var quickRunningActive = runningOnlyFilter && runningConversationCount > 0; var quickHotActive = !sortConversationsByRecent && spotlightConversationCount > 0; var showQuickStrip = allowQuickStrip && (quickRunningActive || quickHotActive); return new AppStateService.OperationalStatusPresentationState { ShowRuntimeBadge = status.ShowRuntimeBadge && hasLiveRuntimeActivity, RuntimeLabel = status.RuntimeLabel, ShowLastCompleted = status.ShowLastCompleted, LastCompletedText = status.LastCompletedText, ShowCompactStrip = showCompactStrip, StripKind = showCompactStrip ? status.StripKind : "none", StripText = showCompactStrip ? status.StripText : "", StripBackgroundHex = stripBackgroundHex, StripBorderHex = stripBorderHex, StripForegroundHex = stripForegroundHex, ShowQuickStrip = showQuickStrip, QuickRunningText = runningConversationCount > 0 ? $"진행 {runningConversationCount}" : "진행", QuickHotText = spotlightConversationCount > 0 ? $"활동 {spotlightConversationCount}" : "활동", QuickRunningActive = quickRunningActive, QuickHotActive = quickHotActive, QuickRunningBackgroundHex = quickRunningActive ? "#DBEAFE" : "#F8FAFC", QuickRunningBorderHex = quickRunningActive ? "#93C5FD" : "#E5E7EB", QuickRunningForegroundHex = quickRunningActive ? "#1D4ED8" : "#6B7280", QuickHotBackgroundHex = quickHotActive ? "#F5F3FF" : "#F8FAFC", QuickHotBorderHex = quickHotActive ? "#C4B5FD" : "#E5E7EB", QuickHotForegroundHex = quickHotActive ? "#6D28D9" : "#6B7280", }; } private static (string backgroundHex, string borderHex, string foregroundHex) ResolveStripColors(string stripKind, bool visible) { if (!visible) return ("", "", ""); if (string.Equals(stripKind, "permission_waiting", StringComparison.OrdinalIgnoreCase)) return ("#FFF7ED", "#FDBA74", "#C2410C"); if (string.Equals(stripKind, "failed_run", StringComparison.OrdinalIgnoreCase) || string.Equals(stripKind, "permission_denied", StringComparison.OrdinalIgnoreCase)) return ("#FEF2F2", "#FECACA", "#991B1B"); return ("", "", ""); } }