//
//  MainViewControllerExtension.swift
//  TodoApp
//
//  Created by Lanh Vo on 8/13/19.
//  Copyright © 2019 Lanh Vo. All rights reserved.
//

import UIKit

extension MainViewController: UITableViewDataSource, UITableViewDelegate {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if let todoList = self.todoList {
            return todoList.count
        }
        return 0
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "TodoTableViewCell", for: indexPath) as! TodoTableViewCell
        if let todoList = self.todoList {
            cell.setUpData(data: todoList[indexPath.row])
        }
        cell.selectionStyle = .none
        cell.delegate = self
        return cell
    }
    
    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        self.cellHeights[indexPath] = cell.frame.size.height
    }
    
    func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
        return self.cellHeights[indexPath] ?? 70.0
    }
    
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: false)
    }
    
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return UITableView.automaticDimension
    }
    
    func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
        return true
    }
    
    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
        if editingStyle == .delete {
            self.handleDeleteAction(indexPath: indexPath)
        }
    }
}

extension MainViewController: UITextFieldDelegate {
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        self.handleReturnAction()
        return true
    }
}

extension MainViewController: TodoTableViewCellDelegate {
    func deleteTodoItem(data: TodoModel, cell: UITableViewCell) {
        if let indexPath = self.tableView.indexPath(for: cell) {
            self.handleDeleteAction(indexPath: indexPath)
        }
    }
    
    func checkTodoItem(data: TodoModel, cell: UITableViewCell) {
        self.handleCheckAction(data: data)
        self.getData()
    }
}
