/*
 * 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 IGListSwiftKit
import UIKit

final class DemoItem: NSObject {

    let name: String
    let controllerClass: UIViewController.Type
    let controllerIdentifier: String?

    init(name: String,
         controllerClass: UIViewController.Type,
         controllerIdentifier: String? = nil) {

        self.name = name
        self.controllerClass = controllerClass
        self.controllerIdentifier = controllerIdentifier
    }

}

final class DemoSectionController: ListSectionController {

    var object: DemoItem?

    override init() {
        super.init()
        inset = UIEdgeInsets(top: 0, left: 50, bottom: 10, right: 0)
    }

    override func numberOfItems() -> Int {
        return 1
    }

    override func sizeForItem(at index: Int) -> CGSize {
        let itemWidth = (collectionContext!.containerSize.width / 2) - inset.left
        return CGSize(width: itemWidth, height: 100)
    }

    override func cellForItem(at index: Int) -> UICollectionViewCell {
        guard let cell: DemoCell = collectionContext?.dequeueReusableCell(for: self, at: index) else {
            fatalError()
        }
        cell.label.text = object?.name
        return cell
    }

    override func didUpdate(to object: Any) {
        self.object = object as? DemoItem
    }

    override func didSelectItem(at index: Int) {
        if let identifier = object?.controllerIdentifier {
            let storyboard = UIStoryboard(name: "Demo", bundle: nil)
            let controller = storyboard.instantiateViewController(withIdentifier: identifier)
            controller.title = object?.name
            viewController?.navigationController?.pushViewController(controller, animated: true)
        } else if let controller = object?.controllerClass.init() {
            controller.title = object?.name
            viewController?.navigationController?.pushViewController(controller, animated: true)
        }
    }

}
