import Foundation import UIKit import Display import SwiftSignalKit import Postbox import TelegramCore public struct ChatListNodeAdditionalCategory { public var id: Int public var icon: UIImage? public var title: String public init(id: Int, icon: UIImage?, title: String) { self.id = id self.icon = icon self.title = title } } public struct ContactMultiselectionControllerAdditionalCategories { public var categories: [ChatListNodeAdditionalCategory] public var selectedCategories: Set public init(categories: [ChatListNodeAdditionalCategory], selectedCategories: Set) { self.categories = categories self.selectedCategories = selectedCategories } } public enum ContactMultiselectionControllerMode { case groupCreation case peerSelection(searchChatList: Bool, searchGroups: Bool, searchChannels: Bool) case channelCreation case chatSelection(title: String, selectedChats: Set, additionalCategories: ContactMultiselectionControllerAdditionalCategories?, chatListFilters: [ChatListFilter]?) } public enum ContactListFilter { case excludeSelf case exclude([PeerId]) case disable([PeerId]) } public final class ContactMultiselectionControllerParams { public let context: AccountContext public let mode: ContactMultiselectionControllerMode public let options: [ContactListAdditionalOption] public let filters: [ContactListFilter] public let alwaysEnabled: Bool public let limit: Int32? public init(context: AccountContext, mode: ContactMultiselectionControllerMode, options: [ContactListAdditionalOption], filters: [ContactListFilter] = [.excludeSelf], alwaysEnabled: Bool = false, limit: Int32? = nil) { self.context = context self.mode = mode self.options = options self.filters = filters self.alwaysEnabled = alwaysEnabled self.limit = limit } } public enum ContactMultiselectionResult { case none case result(peerIds: [ContactListPeerId], additionalOptionIds: [Int]) } public protocol ContactMultiselectionController: ViewController { var result: Signal { get } var displayProgress: Bool { get set } var dismissed: (() -> Void)? { get set } }