//
// Swiftfin is subject to the terms of the Mozilla Public
// License, v2.0. If a copy of the MPL was not distributed with this
// file, you can obtain one at https://mozilla.org/MPL/2.0/.
//
// Copyright (c) 2024 Jellyfin & Jellyfin Contributors
//

import Foundation
import JellyfinAPI

// This is only kept as reference until more strongly-typed errors are implemented.

// enum NetworkError: Error {
//
//    /// For the case that the ErrorResponse object has a code of -1
//    case URLError(response: ErrorResponse, displayMessage: String?)
//
//    /// For the case that the ErrorRespones object has a code of -2
//    case HTTPURLError(response: ErrorResponse, displayMessage: String?)
//
//    /// For the case that the ErrorResponse object has a positive code
//    case JellyfinError(response: ErrorResponse, displayMessage: String?)
//
//    var errorMessage: ErrorMessage {
//        switch self {
//        case let .URLError(response, displayMessage):
//            return NetworkError.parseURLError(from: response, displayMessage: displayMessage)
//        case let .HTTPURLError(response, displayMessage):
//            return NetworkError.parseHTTPURLError(from: response, displayMessage: displayMessage)
//        case let .JellyfinError(response, displayMessage):
//            return NetworkError.parseJellyfinError(from: response, displayMessage: displayMessage)
//        }
//    }
//
//    private static func parseURLError(from response: ErrorResponse, displayMessage: String?) -> ErrorMessage {
//        let errorMessage: ErrorMessage
//
//        switch response {
//        case let .error(_, _, _, err):
//
//            // Code references:
//            // https://developer.apple.com/documentation/foundation/1508628-url_loading_system_error_codes
//            switch err._code {
//            case -1001:
//                errorMessage = ErrorMessage(
//                    code: err._code,
//                    title: L10n.error,
//                    message: L10n.networkTimedOut
//                )
//            case -1003:
//                errorMessage = ErrorMessage(
//                    code: err._code,
//                    title: L10n.error,
//                    message: L10n.unableToFindHost
//                )
//            case -1004:
//                errorMessage = ErrorMessage(
//                    code: err._code,
//                    title: L10n.error,
//                    message: L10n.cannotConnectToHost
//                )
//            default:
//                errorMessage = ErrorMessage(
//                    code: err._code,
//                    title: L10n.error,
//                    message: L10n.unknownError
//                )
//            }
//        }
//
//        return errorMessage
//    }
//
//    private static func parseHTTPURLError(from response: ErrorResponse, displayMessage: String?) -> ErrorMessage {
//        let errorMessage: ErrorMessage
//
//        // Not implemented as has not run into one of these errors as time of writing
//        switch response {
//        case .error:
//            errorMessage = ErrorMessage(
//                code: 0,
//                title: L10n.error,
//                message: "An HTTP URL error has occurred"
//            )
//        }
//
//        return errorMessage
//    }
//
//    private static func parseJellyfinError(from response: ErrorResponse, displayMessage: String?) -> ErrorMessage {
//        let errorMessage: ErrorMessage
//
//        switch response {
//        case let .error(code, _, _, _):
//
//            // Generic HTTP status codes
//            switch code {
//            case 401:
//                errorMessage = ErrorMessage(
//                    code: code,
//                    title: L10n.unauthorized,
//                    message: L10n.unauthorizedUser
//                )
//            default:
//                errorMessage = ErrorMessage(
//                    code: code,
//                    title: L10n.error,
//                    message: displayMessage ?? L10n.unknownError
//                )
//            }
//        }
//
//        return errorMessage
//    }
// }
