// // MainModuleBuilder.swift // PrivadoVPN // // Created by Juraldinio on 1/27/21. // Copyright © 2021 Privado LLC. All rights reserved. // import Foundation import AppKit final class MainModuleBuilder { static func build(output: MainModuleOutput, type: Route.Main) -> (MainPresenterInput, NSViewController) { let interactor = MainInteractor(with: Environment.router, tokenResolver: { guard let session = try? Session.instance() else { return "" } return session.currentRecord?.token ?? "" }) let presenter = MainPresenter(interactor: interactor, output: output, type: type) let controller = MainController(output: presenter, headerCreation: Self.creator(output: output), componentCreation: Self.createComponent(with: presenter)) presenter.viewInput = controller return (presenter, controller) } private static func creator(output: HeaderControllerModuleOutput?) -> MainController.HeaderCreationClosure { return { () -> NSViewController in HeaderControllerBuilder.build(icon: .none, output: output) } } private static func createComponent(with presenter: MainPresenter) -> MainController.ComponentCreationClosure { return { (component: MainControllerComponent) -> NSView in switch component { case .notification: return NotificationPanelBuilder.build(output: presenter) case .connection: return ConnectionPanelBuilder.build(output: presenter) case .servers: return ServerPanelBuilder.build(output: presenter) case .killswitch: return KilSwitchPanelBuilder.build(output: presenter) case .remaining: return TrafficPanelBuilder.build(output: presenter) } // .notification } } }