import SwiftSignalKit
import Postbox

public final class EngineContactList {
    public let peers: [EnginePeer]
    public let presences: [EnginePeer.Id: EnginePeer.Presence]

    public init(peers: [EnginePeer], presences: [EnginePeer.Id: EnginePeer.Presence]) {
        self.peers = peers
        self.presences = presences
    }
}

public extension TelegramEngine.EngineData.Item {
    enum Contacts {
        public struct List: TelegramEngineDataItem, PostboxViewDataItem {
            public typealias Result = EngineContactList

            private let includePresences: Bool

            public init(includePresences: Bool) {
                self.includePresences = includePresences
            }

            var key: PostboxViewKey {
                return .contacts(accountPeerId: nil, includePresences: self.includePresences)
            }

            func extract(view: PostboxView) -> Result {
                guard let view = view as? ContactPeersView else {
                    preconditionFailure()
                }
                return EngineContactList(peers: view.peers.map(EnginePeer.init), presences: view.peerPresences.mapValues(EnginePeer.Presence.init))
            }
        }
    }
}