text: //
  // Copyright (c) 2020 Related Code - http://relatedcode.com
  //
  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  // THE SOFTWARE.
  
  import UIKit
  
  //-------------------------------------------------------------------------------------------------------------------------------------------------
  class NotificationsView: UIViewController {
  
  	@IBOutlet var tableView: UITableView!
  
  	@IBOutlet var buttonTab1: UIButton!
  	@IBOutlet var buttonTab2: UIButton!
  
  	@IBOutlet var viewTab1: UIView!
  	@IBOutlet var viewTab2: UIView!
  
  	private var notifications: [[[String: String]]] = []
  
  	//---------------------------------------------------------------------------------------------------------------------------------------------
  	override func viewDidLoad() {
  
  		super.viewDidLoad()
  		navigationController?.navigationBar.isHidden = true
  		navigationController?.navigationBar.prefersLargeTitles = false
  		navigationItem.largeTitleDisplayMode = .never
  
  		tableView.register(UINib(nibName: "NotificationsCell", bundle: Bundle.main), forCellReuseIdentifier: "NotificationsCell")
  
  		buttonTab1.isSelected = true
  		updateUI()
  
  		loadData()
  	}
  
  	//---------------------------------------------------------------------------------------------------------------------------------------------
  	override func viewWillDisappear(_ animated: Bool) {
  
  		super.viewWillDisappear(animated)
  		navigationController?.navigationBar.isHidden = false
  	}
  
  	// MARK: - Data methods
  	//---------------------------------------------------------------------------------------------------------------------------------------------
  	func loadData() {
  
  		notifications.removeAll()
  
  		var section1 = [[String: String]]()
  		var section2 = [[String: String]]()
  
  		var dict1: [String: String] = [:]
  		dict1["name"] = "Fabia Smith"
  		dict1["time"] = "Now"
  		dict1["description"] = "liked your post"
  		section1.append(dict1)
  
  		var dict2: [String: String] = [:]
  		dict2["name"] = "Emma Harris"
  		dict2["time"] = "2 min ago"
  		dict2["description"] = "left a comment on your photo"
  		section1.append(dict2)
  
  		var dict3: [String: String] = [:]
  		dict3["name"] = "Chloe Adams"
  		dict3["time"] = "a hour ago"
  		dict3["description"] = "liked your 4 photos"
  		section1.append(dict3)
  
  		var dict4: [String: String] = [:]
  		dict4["name"] = "Alan Nickerson"
  		dict4["time"] = "a hour ago"
  		dict4["description"] = "follows you"
  		section1.append(dict4)
  
  		var dict5: [String: String] = [:]
  		dict5["name"] = "Egon Pratt"
  		dict5["time"] = "1 day ago"
  		dict5["description"] = "liked your comment"
  		section2.append(dict5)
  
  		notifications = [section1, section2]
  
  		refreshTableView()
  	}
  
  	// MARK: - Helper methods
  	//---------------------------------------------------------------------------------------------------------------------------------------------
  	func updateUI() {
  
  		buttonTab1.titleLabel?.textColor = buttonTab1.isSelected ? AppColor.Theme : UIColor.label
  		buttonTab2.titleLabel?.textColor = buttonTab2.isSelected ? AppColor.Theme : UIColor.label
  
  		viewTab1.backgroundColor = buttonTab1.isSelected ? AppColor.Theme : UIColor.opaqueSeparator
  		viewTab2.backgroundColor = buttonTab2.isSelected ? AppColor.Theme : UIColor.opaqueSeparator
  	}
  
  	// MARK: - User actions
  	//---------------------------------------------------------------------------------------------------------------------------------------------
  	@IBAction func actionTab1(_ sender: UIButton) {
  
  		print(#function)
  		buttonTab1.isSelected = true
  		buttonTab2.isSelected = false
  		updateUI()
  	}
  
  	//---------------------------------------------------------------------------------------------------------------------------------------------
  	@IBAction func actionTab2(_ sender: UIButton) {
  
  		print(#function)
  		buttonTab1.isSelected = false
  		buttonTab2.isSelected = true
  		updateUI()
  	}
  
  	//---------------------------------------------------------------------------------------------------------------------------------------------
  	@objc func actionFollow(_ sender: UIButton) {
  
  		print(#function)
  	}
  
  	// MARK: - Refresh methods
  	//---------------------------------------------------------------------------------------------------------------------------------------------
  	func refreshTableView() {
  
  		tableView.reloadData()
  	}
  }
  
  // MARK: - UITableViewDataSource
  //-------------------------------------------------------------------------------------------------------------------------------------------------
  extension NotificationsView: UITableViewDataSource {
  
  	//---------------------------------------------------------------------------------------------------------------------------------------------
  	func numberOfSections(in tableView: UITableView) -> Int {
  
  		return notifications.count
  	}
  
  	//---------------------------------------------------------------------------------------------------------------------------------------------
  	func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  
  		return notifications[section].count
  	}
  
  	//---------------------------------------------------------------------------------------------------------------------------------------------
  	func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  
  		let cell = tableView.dequeueReusableCell(withIdentifier: "NotificationsCell", for: indexPath) as! NotificationsCell
  		cell.bindData(index: indexPath.item + (indexPath.section * 5), data: notifications[indexPath.section][indexPath.row])
  		cell.buttonFollow.isHidden = !(indexPath.section == 0 && indexPath.row == 3)
  		cell.buttonFollow.addTarget(self, action: #selector(actionFollow(_:)), for: .touchUpInside)
  		return cell
  	}
  }
  
  // MARK: - UITableViewDelegate
  //-------------------------------------------------------------------------------------------------------------------------------------------------
  extension NotificationsView: UITableViewDelegate {
  
  	//---------------------------------------------------------------------------------------------------------------------------------------------
  	func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  
  		print("didSelectItemAt \(indexPath.row)")
  
  		dismiss(animated: true)
  	}
  
  	//---------------------------------------------------------------------------------------------------------------------------------------------
  	func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
  
  		return 70
  	}
  
  	//---------------------------------------------------------------------------------------------------------------------------------------------
  	func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
  
  		return 50
  	}
  
  	//---------------------------------------------------------------------------------------------------------------------------------------------
  	func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
  
  		if (section == 0) { return "Today" }
  		if (section == 1) { return "Yesterday" }
  
  		return nil
  	}
  
  	//---------------------------------------------------------------------------------------------------------------------------------------------
  	func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
  
  		if let header = view as? UITableViewHeaderFooterView {
  			let viewY = header.frame.size.height - 0.5
  			let view = UIView(frame: CGRect(x: 0, y: viewY, width: header.frame.size.width, height: 0.5))
  			view.backgroundColor = .tertiarySystemFill
  			view.tag = 1001
  			header.contentView.subviews.forEach { (view) in
  				if (view.tag == 1001) {
  					view.removeFromSuperview()
  				}
  			}
  			header.contentView.addSubview(view)
  			header.textLabel?.font = UIFont.systemFont(ofSize: 12)
  		}
  	}
  
  	//---------------------------------------------------------------------------------------------------------------------------------------------
  	func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
  
  		return 10
  	}
  }
  