import Postbox

public struct BotCommand: PostboxCoding, Hashable {
    public let text: String
    public let description: String
    
    public init(text: String, description: String) {
        self.text = text
        self.description = description
    }
    
    public init(decoder: PostboxDecoder) {
        self.text = decoder.decodeStringForKey("t", orElse: "")
        self.description = decoder.decodeStringForKey("d", orElse: "")
    }
    
    public func encode(_ encoder: PostboxEncoder) {
        encoder.encodeString(self.text, forKey: "t")
        encoder.encodeString(self.description, forKey: "d")
    }
}

public final class BotInfo: PostboxCoding, Equatable {
    public let description: String
    public let commands: [BotCommand]
    
    public init(description: String, commands: [BotCommand]) {
        self.description = description
        self.commands = commands
    }
    
    public init(decoder: PostboxDecoder) {
        self.description = decoder.decodeStringForKey("d", orElse: "")
        self.commands = decoder.decodeObjectArrayWithDecoderForKey("c")
    }
    
    public func encode(_ encoder: PostboxEncoder) {
        encoder.encodeString(self.description, forKey: "d")
        encoder.encodeObjectArray(self.commands, forKey: "c")
    }
    
    public static func ==(lhs: BotInfo, rhs: BotInfo) -> Bool {
        return lhs.description == rhs.description && lhs.commands == rhs.commands
    }
}