// Copyright 2019-present the Material Components for iOS authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

import UIKit
import MaterialComponents.MaterialButtons
import MaterialComponents.MaterialButtons_Theming 
import MaterialComponents.MaterialDialogs
import MaterialComponents.MaterialDialogs_Theming 
import MaterialComponents.MaterialList
import MaterialComponents.MaterialContainerScheme
import MaterialComponents.MaterialTypographyScheme

class CustomDialogViewController: UIViewController, UICollectionViewDelegate,
  UICollectionViewDataSource
{
  let dialogTitle: String = "Set backup account"
  var userAccounts: [String] = ["user01@gmail.com", "user02@gmail.com"]
  var containerScheme = MDCContainerScheme()
  var userCollectionView: UICollectionView!

  override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
    containerScheme.colorScheme = MDCSemanticColorScheme(defaults: .material201804)
    containerScheme.typographyScheme = MDCTypographyScheme()
  }

  required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
  }

  override func viewDidLoad() {
    super.viewDidLoad()
    view.backgroundColor = containerScheme.colorScheme.backgroundColor

    let titleLabel = UILabel()
    titleLabel.text = dialogTitle
    titleLabel.translatesAutoresizingMaskIntoConstraints = false
    titleLabel.font = containerScheme.typographyScheme.headline6
    titleLabel.numberOfLines = 0
    self.view.addSubview(titleLabel)

    let flowLayout = UICollectionViewFlowLayout()
    flowLayout.minimumLineSpacing = 0
    flowLayout.estimatedItemSize = CGSize(width: 250.0, height: 10.0)

    userCollectionView = UICollectionView(
      frame: .zero,
      collectionViewLayout: flowLayout)
    userCollectionView.backgroundColor = UIColor.clear
    userCollectionView.register(
      MDCSelfSizingStereoCell.self,
      forCellWithReuseIdentifier: "MDCSelfSizingStereoCell")
    userCollectionView.translatesAutoresizingMaskIntoConstraints = false
    userCollectionView.delegate = self
    userCollectionView.dataSource = self
    self.view.addSubview(userCollectionView)

    let cancelButton = MDCButton()
    cancelButton.setTitle("Cancel", for: .normal)
    cancelButton.applyTextTheme(withScheme: containerScheme)
    cancelButton.translatesAutoresizingMaskIntoConstraints = false
    cancelButton.addTarget(self, action: #selector(dismissDialog), for: .touchUpInside)
    self.view.addSubview(cancelButton)

    NSLayoutConstraint.activate([
      NSLayoutConstraint(
        item: titleLabel,
        attribute: .left,
        relatedBy: .equal,
        toItem: self.view,
        attribute: .left,
        multiplier: 1.0,
        constant: 20.0),
      NSLayoutConstraint(
        item: titleLabel,
        attribute: .top,
        relatedBy: .equal,
        toItem: self.view,
        attribute: .top,
        multiplier: 1.0,
        constant: 25.0),
      NSLayoutConstraint(
        item: cancelButton,
        attribute: .right,
        relatedBy: .equal,
        toItem: self.view,
        attribute: .right,
        multiplier: 1.0,
        constant: -10.0),
      NSLayoutConstraint(
        item: cancelButton,
        attribute: .bottom,
        relatedBy: .equal,
        toItem: self.view,
        attribute: .bottom,
        multiplier: 1.0,
        constant: -15.0),
      NSLayoutConstraint(
        item: userCollectionView,
        attribute: .left,
        relatedBy: .equal,
        toItem: titleLabel,
        attribute: .left,
        multiplier: 1.0,
        constant: 0.0),
      NSLayoutConstraint(
        item: userCollectionView,
        attribute: .right,
        relatedBy: .equal,
        toItem: cancelButton,
        attribute: .right,
        multiplier: 1.0,
        constant: 0.0),
      NSLayoutConstraint(
        item: userCollectionView,
        attribute: .top,
        relatedBy: .equal,
        toItem: titleLabel,
        attribute: .bottom,
        multiplier: 1.0,
        constant: 30.0),
      NSLayoutConstraint(
        item: userCollectionView,
        attribute: .bottom,
        relatedBy: .equal,
        toItem: cancelButton,
        attribute: .top,
        multiplier: 1.0,
        constant: -30.0),

    ])
  }

  override var preferredContentSize: CGSize {
    get {
      return CGSize(width: 200.0, height: 330.0)
    }
    set {
      super.preferredContentSize = newValue
    }
  }

  @objc func dismissDialog() {
    self.dismiss(animated: true)
  }

  // MARK: Collection View Data Source

  func numberOfSections(in collectionView: UICollectionView) -> Int {
    return 1
  }

  func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int)
    -> Int
  {
    return userAccounts.count + 1
  }

  func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath)
    -> UICollectionViewCell
  {
    let cell =
      collectionView.dequeueReusableCell(
        withReuseIdentifier: "MDCSelfSizingStereoCell",
        for: indexPath) as! MDCSelfSizingStereoCell
    let bundle = Bundle(for: CustomDialogViewController.self)
    if indexPath.item < 2 {
      cell.leadingImageView.image = UIImage(named: "ic_person", in: bundle, compatibleWith: nil)
      cell.titleLabel.text = userAccounts[indexPath.item]
      cell.titleLabel.font = containerScheme.typographyScheme.body2
    } else {
      cell.leadingImageView.image = UIImage(named: "add_circle", in: bundle, compatibleWith: nil)
      cell.titleLabel.text = "Add account"
      cell.titleLabel.font = containerScheme.typographyScheme.body2
    }
    return cell
  }
}

class DialogsThemedPresentationExampleViewController: UIViewController {

  private let materialButton = MDCButton()
  private let transitionController = MDCDialogTransitionController()
  var containerScheme = MDCContainerScheme()

  override func viewDidLoad() {
    super.viewDidLoad()

    view.backgroundColor = containerScheme.colorScheme.backgroundColor

    materialButton.translatesAutoresizingMaskIntoConstraints = false
    materialButton.setTitle("Custom Alert With Themed Presentation", for: .normal)
    materialButton.sizeToFit()
    materialButton.addTarget(self, action: #selector(tap), for: .touchUpInside)
    materialButton.applyTextTheme(withScheme: containerScheme)
    self.view.addSubview(materialButton)

    NSLayoutConstraint.activate([
      NSLayoutConstraint(
        item: materialButton,
        attribute: .centerX,
        relatedBy: .equal,
        toItem: self.view,
        attribute: .centerX,
        multiplier: 1.0,
        constant: 0.0),
      NSLayoutConstraint(
        item: materialButton,
        attribute: .centerY,
        relatedBy: .equal,
        toItem: self.view,
        attribute: .centerY,
        multiplier: 1.0,
        constant: 0.0),
    ])
  }

  @objc func tap(_ sender: Any) {
    let customDialogController = CustomDialogViewController()
    customDialogController.modalPresentationStyle = .custom
    customDialogController.transitioningDelegate = self.transitionController

    customDialogController.mdc_dialogPresentationController?.applyTheme(withScheme: containerScheme)
    present(customDialogController, animated: true, completion: nil)
  }
}

extension DialogsThemedPresentationExampleViewController {

  @objc class func catalogMetadata() -> [String: Any] {
    return [
      "breadcrumbs": ["Dialogs", "Dialog Presentation Controller Theming"],
      "primaryDemo": false,
      "presentable": false,
    ]
  }
}

// MARK: Snapshot Testing by Convention
extension DialogsThemedPresentationExampleViewController {

  func resetTests() {
    if presentedViewController != nil {
      dismiss(animated: false)
    }
  }

  @objc func testPresented() {
    resetTests()
    tap(UIButton())
  }
}
