import Foundation import SwiftUI import SFSafeSymbols extension MessageResult { var color: Color { switch self { // Initial state when not configured case .noKeyAvailable: return Color(red: 50/255, green: 50/255, blue: 50/255) // All ready states case .notChecked, .messageAccepted, .deviceAvailable: return Color(red: 115/255, green: 140/255, blue: 90/255) case .unlocked: return Color(red: 65/255, green: 110/255, blue: 60/255) // All implementation errors case .textReceived, .unexpectedSocketEvent, .invalidMessageSizeFromDevice, .invalidMessageSizeFromRemote, .invalidMessageTypeFromDevice, .invalidMessageTypeFromRemote, .unknownMessageResultFromDevice, .invalidUrlParameter, .noOrInvalidBodyDataFromRemote, .invalidMessageResultFromRemote, .unexpectedUrlResponseType, .unexpectedServerResponseCode, .internalServerError, .pathOnServerNotFound, .missingOrInvalidAuthenticationHeaderFromRemote: return Color(red: 30/255, green: 30/255, blue: 160/255) // All security errors case .invalidSignatureFromRemote, .invalidServerChallengeFromDevice, .invalidServerChallengeFromRemote, .invalidClientChallengeFromDevice, .invalidClientChallengeFromRemote, .invalidSignatureFromDevice: return Color(red: 160/255, green: 30/255, blue: 30/255) // Connection errors case .tooManyRequests, .deviceTimedOut, .deviceNotConnected, .serviceBehindProxyUnavailable: return Color(red: 150/255, green: 90/255, blue: 90/255) // Configuration errors case .serverUrlInvalid, .invalidServerAuthenticationFromRemote: return Color(red: 100/255, green: 100/255, blue: 140/255) } } var symbol: SFSymbol { switch self { // Initial state when not configured case .noKeyAvailable: return .questionmarkKeyFilled // .keySlash in 5.0 // All ready states case .notChecked, .messageAccepted, .deviceAvailable: return .checkmark case .unlocked: return .lockOpen // All implementation errors case .textReceived, .unexpectedSocketEvent, .invalidMessageSizeFromDevice, .invalidMessageSizeFromRemote, .invalidMessageTypeFromDevice, .invalidMessageTypeFromRemote, .unknownMessageResultFromDevice, .invalidUrlParameter, .noOrInvalidBodyDataFromRemote, .invalidMessageResultFromRemote, .unexpectedUrlResponseType, .unexpectedServerResponseCode, .internalServerError, .pathOnServerNotFound, .missingOrInvalidAuthenticationHeaderFromRemote: return .questionmarkDiamond // All security errors case .invalidSignatureFromRemote, .invalidServerChallengeFromDevice, .invalidServerChallengeFromRemote, .invalidClientChallengeFromDevice, .invalidClientChallengeFromRemote, .invalidSignatureFromDevice: return .lockTrianglebadgeExclamationmark // Connection errors case .tooManyRequests, .deviceTimedOut, .deviceNotConnected, .serviceBehindProxyUnavailable: return .antennaRadiowavesLeftAndRightSlash // Configuration errors case .serverUrlInvalid, .invalidServerAuthenticationFromRemote: return .gearBadgeQuestionmark } } }