/*
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */

import IGListKit
import UIKit

final class DemosViewController: UIViewController, ListAdapterDataSource {

    lazy var adapter: ListAdapter = {
        return ListAdapter(updater: ListAdapterUpdater(), viewController: self)
    }()
    let collectionView = UICollectionView(frame: .zero, collectionViewLayout: UICollectionViewFlowLayout())

    let demos: [DemoItem] = [
        DemoItem(name: "Tail Loading",
                 controllerClass: LoadMoreViewController.self),
        DemoItem(name: "Search Autocomplete",
                 controllerClass: SearchViewController.self),
        DemoItem(name: "Mixed Data",
                 controllerClass: MixedDataViewController.self),
        DemoItem(name: "Nested Adapter",
                 controllerClass: NestedAdapterViewController.self),
        DemoItem(name: "Empty View",
                 controllerClass: EmptyViewController.self),
        DemoItem(name: "Single Section Controller",
                 controllerClass: SingleSectionViewController.self),
        DemoItem(name: "Storyboard",
                 controllerClass: SingleSectionViewController.self,
                 controllerIdentifier: "demo"),
        DemoItem(name: "Single Section Storyboard",
                 controllerClass: SingleSectionStoryboardViewController.self,
                 controllerIdentifier: "singleSectionDemo"),
        DemoItem(name: "Working Range",
                 controllerClass: WorkingRangeViewController.self),
        DemoItem(name: "Diff Algorithm",
                 controllerClass: DiffTableViewController.self),
        DemoItem(name: "Supplementary Views",
                 controllerClass: SupplementaryViewController.self),
        DemoItem(name: "Self-sizing cells",
                 controllerClass: SelfSizingCellsViewController.self),
        DemoItem(name: "Display delegate",
                 controllerClass: DisplayViewController.self),
        DemoItem(name: "Objc Demo",
                 controllerClass: ObjcDemoViewController.self),
        DemoItem(name: "Objc Generated Model Demo",
                 controllerClass: ObjcGeneratedModelDemoViewController.self),
        DemoItem(name: "Calendar (auto diffing)",
                 controllerClass: CalendarViewController.self),
        DemoItem(name: "Dependency Injection",
                 controllerClass: AnnouncingDepsViewController.self),
        DemoItem(name: "Reorder Cells",
                 controllerClass: ReorderableViewController.self)
    ]

    override func viewDidLoad() {
        super.viewDidLoad()
        title = "Demos"
        view.addSubview(collectionView)
        adapter.collectionView = collectionView
        adapter.dataSource = self
    }

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        collectionView.frame = view.bounds
    }

    // MARK: ListAdapterDataSource

    func objects(for listAdapter: ListAdapter) -> [ListDiffable] {
        return demos
    }

    func listAdapter(_ listAdapter: ListAdapter, sectionControllerFor object: Any) -> ListSectionController {
        return DemoSectionController()
    }

    func emptyView(for listAdapter: ListAdapter) -> UIView? {
        return nil
    }

}
