//
//  LogLevel.swift
//  Logger
//
//  Created by Alexander Ivlev on 22/02/2019.
//  Copyright © 2019 ApostleLife. All rights reserved.
//


/// Уровни логирования
public enum LogLevel
{
    /// Полностью отключает логирование
    case none

    /// Критическая ошибка. После возникновения критической ошибки программа точно не может работать дальше.
    case fatal

    /// assert. По своей сути похожа на обычную ошибку, но предназначенную для дебага.
    /// То есть это вид ошибок которые помогают отлавливать несогласование контрактов вызова функций
    case assert

    /// Обычная Ошибка. После возникновения обычной ошибки программа может продолжить исполнение, но корректность ее работы не гарантируется.
    case error

    /// Предупреждение. После возникновения предупреждения программа продолжает корректное исполение, но ситуация в которой прозошла проблема скорей всего не будет закончена корректна.
    case warning

    /// Информационное. Данный уровень используется для написания какой либо полезной информации, но которая не является переодической.
    /// Более того если нужно написать много данных то сам факт наличия данных пишется на этом уровне, а данные переносятся на уровень trace.
    case info

    /// Дебаг. Эквивалент информационному сообщению, но используется исключительно для дебага.
    /// На этом уровне можно писать некоторые приватные данные, так как данный уровень не будет использоваться у клиетов и при выпуске.
    case debug

    /// Свалка. Данный уровень используется для чего угодно. Позволяет подробно проанализировать ситуацию, но обычно является избыточным и сильно большим.
    case trace

    internal var priority: Int {
        switch self {
        case .none: return 0
        case .fatal: return 100
        case .assert: return 150
        case .error: return 200
        case .warning: return 300
        case .info: return 400
        case .debug: return 450
        case .trace: return 500
        }
    }
}
