import Foundation

struct RegisterRequest: Encodable {
    let company: String
    let code: String
    let device_name: String
}

struct RegisterResponse: Decodable {
    let device_uid: String
    let api_token: String
    let signing_secret: String?
    let device_name: String
    let company: CompanySummary?
    let branding: BrandingPayload?
}

struct CompanySummary: Decodable {
    let id: Int
    let name: String
    let slug: String
}

struct BrandingPayload: Decodable {
    let enabled: Bool
    let app_name: String?
    let logo_url: String?
}

struct HeartbeatRequest: Encodable {
    let battery_level: Int?
    let sim_slot: String?
    let network_type: String?
    let last_error: String?
}

struct HeartbeatResponse: Decodable {
    let status: String
    let last_seen: String?
    let branding: BrandingPayload?
}

struct MessagePayload: Encodable {
    let device_id: String
    let sender: String
    let message: String
    let received_at: String
    let sim_slot: String?
}

struct KeywordsResponse: Decodable {
    let keywords: [String]
}

struct SenderFiltersResponse: Decodable {
    let whitelist: [String]
    let blacklist: [String]
}

enum NotifyHubError: LocalizedError {
    case invalidResponse
    case server(String)
    case accessDenied(code: String, message: String)
    case maintenance(String)

    var errorDescription: String? {
        switch self {
        case .invalidResponse:
            return "Unexpected server response."
        case .server(let message):
            return message
        case .accessDenied(_, let message):
            return message
        case .maintenance(let message):
            return message
        }
    }

    var isAccessDenied: Bool {
        if case .accessDenied = self { return true }
        return false
    }

    var isMaintenance: Bool {
        if case .maintenance = self { return true }
        return false
    }
}
