import Foundation
import Localization

public struct ServiceStatus: Codable, Equatable {
    public struct Status: RawRepresentable, Codable, Equatable {
        public static var maintenance: Status { .init(rawValue: "maintenance") }
        public static var scheduledMaintenance: Status { .init(rawValue: "scheduled_maintenance") }

        public var rawValue: String

        public init(rawValue: String) {
            self.rawValue = rawValue
        }
    }

    public struct Mode: RawRepresentable, Codable, Equatable {
        public static var all: Mode { .init(rawValue: "all") }
        public static var pro: Mode { .init(rawValue: "pro_only") }

        public var rawValue: String

        public init(rawValue: String) {
            self.rawValue = rawValue
        }
    }

    public let status: Status
    public let mode: Mode
    public let message: String

    public init(status: Status, mode: Mode, message: String? = nil) {
        self.status = status
        self.mode = mode
        self.message = {
            // Try to get custom message from API
            guard let message = message, !message.isEmpty else {
                return L10n.APIClient.generationDisabled
            }
            return message
        }()
    }
}
