
import Foundation
import os.log

func log(_ level: Log.Level, message: String) {
    Log.log(level, message: message)
}

public struct Log {
    
    static var level = Level.verbose
    private static var prefix = "CSLIB"
    
    fileprivate static func log(_ level: Level, message: String) {
#if !TESTING
        if level >= Log.level {
            let message = ("\(Log.prefix) \(level.prefix) \(message)")
            os_log("%{public}@", type: level.osLogType, message)
        }
#endif
    }
    
    @objc public enum Level: Int, Comparable {
        
        case verbose
        case info
        case error
        case important
        
        var prefix: String {
            switch self {
            case .verbose:
                return "💬 Verbose:"
            case .info:
                return "ℹ️ Info:"
            case .error:
                return "🔴 Error:"
            case .important:
                return "ℹ️ Info:"
            }
        }
        
        var osLogType: OSLogType {
            switch self {
            case .error:
                return OSLogType.error
            default:
                return OSLogType.info
            }
        }
        
        public static func < (lhs: Log.Level, rhs: Log.Level) -> Bool {
            lhs.rawValue < rhs.rawValue
        }
    }
}
