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
        }
    }
}
