import Models
import Combine
import Integration
import DependencyInjection

final class ContactListViewModel {
    @Dependency private var session: SessionType

    var contacts: AnyPublisher<[Contact], Never> {
        session.contacts(.friends).eraseToAnyPublisher()
    }

    var requestCount: AnyPublisher<Int, Never> {
        Publishers.CombineLatest(
            session.contacts(.received),
            session.groups(.pending)
        ).map { (contacts, groups) in
            let contactRequests = contacts.filter {
                $0.status == .verified ||
                $0.status == .confirming ||
                $0.status == .confirmationFailed ||
                $0.status == .verificationFailed ||
                $0.status == .verificationInProgress
            }

            let groupRequests = groups.filter {
                $0.status == .pending
            }

            return contactRequests.count + groupRequests.count
        }.eraseToAnyPublisher()
    }
}