import Foundation
import Postbox

public enum SynchronizeInstalledStickerPacksOperationNamespace: Int32 {
    case stickers = 0
    case masks = 1
}

public final class SynchronizeInstalledStickerPacksOperation: PostboxCoding {
    public let previousPacks: [ItemCollectionId]
    public let archivedPacks: [ItemCollectionId]
    public let noDelay: Bool
    
    public init(previousPacks: [ItemCollectionId], archivedPacks: [ItemCollectionId], noDelay: Bool) {
        self.previousPacks = previousPacks
        self.archivedPacks = archivedPacks
        self.noDelay = noDelay
    }
    
    public init(decoder: PostboxDecoder) {
        self.previousPacks = ItemCollectionId.decodeArrayFromBuffer(decoder.decodeBytesForKey("p")!)
        self.archivedPacks = decoder.decodeBytesForKey("ap").flatMap(ItemCollectionId.decodeArrayFromBuffer) ?? []
        self.noDelay = decoder.decodeInt32ForKey("nd", orElse: 0) != 0
    }
    
    public func encode(_ encoder: PostboxEncoder) {
        let buffer = WriteBuffer()
        ItemCollectionId.encodeArrayToBuffer(self.previousPacks, buffer: buffer)
        encoder.encodeBytes(buffer, forKey: "p")
        buffer.reset()
        ItemCollectionId.encodeArrayToBuffer(self.archivedPacks, buffer: buffer)
        encoder.encodeBytes(buffer, forKey: "ap")
        encoder.encodeInt32(self.noDelay ? 1 : 0, forKey: "nd")
    }
}

public final class SynchronizeMarkFeaturedStickerPacksAsSeenOperation: PostboxCoding {
    public let ids: [ItemCollectionId]
    
    public init(ids: [ItemCollectionId]) {
        self.ids = ids
    }
    
    public init(decoder: PostboxDecoder) {
        self.ids = ItemCollectionId.decodeArrayFromBuffer(decoder.decodeBytesForKey("p")!)
    }
    
    public func encode(_ encoder: PostboxEncoder) {
        let buffer = WriteBuffer()
        ItemCollectionId.encodeArrayToBuffer(self.ids, buffer: buffer)
        encoder.encodeBytes(buffer, forKey: "p")
    }
}