ResidentsViewController.swift 4.93 KB
//
//  ResidentsViewController.swift
//  InterQR-Internship
//
//  Created by Дмитрий Тимофеев on 14.06.2022.
//

import UIKit

class ResidentsViewController: UIViewController {
    var mainView = ResidentsView()
    var myData: [ResidentModel] = []
    
    let networkManager = AuthNetworkManager()
    
    override func loadView() {
        view = mainView
    }
    
    override func viewDidLoad() {
        initViewController()
        networking()
    }
    
    func initViewController() {
        mainView.tableView.delegate = self
        mainView.tableView.dataSource = self
        mainView.tableView.register(ResidentTableViewCell.self, forCellReuseIdentifier: ResidentTableViewCell.id)
        
        mainView.backButton.addTarget(self, action: #selector(didShowChooseApartVC), for: .touchUpInside)
        mainView.addResidentsButton.addTarget(self, action: #selector(willShowAddResidentVC), for: .touchUpInside)
    }
    
    func modelFilling() -> InitRequestModel? {
        guard let deviceUUID = UIDevice.current.identifierForVendor?.uuidString else {
            return nil
        }
        guard let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String else {
            return nil
        }
        return InitRequestModel(deviceUUID: deviceUUID,
                                manufacturer: .Text.apple,
                                model: UIDevice.current.model,
                                platform: UIDevice.current.systemName,
                                osVersion: UIDevice.current.systemVersion,
                                appVersion: appVersion)
    }
    
    func networking() {
        guard let initUrl = URL(string: APIRoutes.initURL.urlString) else { return }
        guard let model = modelFilling() else { return }
        networkManager.initRequest(initUrl, completion: (InitResponseModel) -> Void, model: model) { responseModel in
            print("1️⃣✅\(responseModel.message)✅")
        } fail: { error in
            print("1️⃣\(error)")
        }
    }
    
    @objc private func didShowChooseApartVC() {
        navigationController?.popViewController(animated: true)
    }
    
    @objc private func willShowAddResidentVC() {
        let addResidentsVC = AddResidentsViewController()
        addResidentsVC.modalPresentationStyle = .overCurrentContext
        addResidentsVC.modalTransitionStyle = .crossDissolve
        addResidentsVC.delegate = self
        present(addResidentsVC, animated: true)
    }
}

//MARK: - TableView delegate & data source
extension ResidentsViewController: UITableViewDelegate, UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        myData.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        guard let cell = tableView.dequeueReusableCell(withIdentifier: ResidentTableViewCell.id, for: indexPath) as? ResidentTableViewCell else { return UITableViewCell() }
        cell.serialNumberLabel.text = "\(indexPath.row + 1)"
        let data = myData[indexPath.row]
        cell.model = data
        cell.delegate = self
        return cell
    }
    
//    @objc private func removeCell(_ sender: UIButton) {
//        myData.remove(at: sender.tag)
//        mainView.tableView.deleteRows(at: [IndexPath(row: sender.tag, section: 0)], with: .fade)
//        mainView.tableView.reloadData()
//    }
    
//    @objc private func didTapManagerButton(_ sender: UIButton) {
//        if !sender.isSelected {
//            sender.isSelected = true
//        } else {
//            sender.isSelected = false
//        }
//    }
}
//MARK: - ResidentSavable delegate
extension ResidentsViewController: ResidentSavable {
    func save(_ data: ResidentModel) {
        self.myData.append(data)
        mainView.tableView.reloadData()
    }
}

//MARK: residentcell delegate
extension ResidentsViewController: ResidentTableViewCellDelegate {
    func didRemoveButtonTapped(cell: ResidentTableViewCell) {
        guard let model = cell.model else {
            return
        }
        myData.removeAll(where: {$0.name == model.name})
        mainView.tableView.reloadData()
    }
    
    func didButtonsTapped(_ sender: UIButton) {
        
    }
    
    func didManagerButtonTapped(cell: ResidentTableViewCell) {
        if !cell.managerButton.isSelected {
            cell.managerButton.isSelected = true
        } else {
            cell.managerButton.isSelected = false
        }
    }
    
    func didHiddenButtonTapped(cell: ResidentTableViewCell) {
        if !cell.hiddenButton.isSelected {
            cell.hiddenButton.isSelected = true
        } else {
            cell.hiddenButton.isSelected = false
        }
    }
    
    func didHeardButtonTapped(cell: ResidentTableViewCell) {
        if !cell.heartButton.isSelected {
            cell.heartButton.isSelected = true
        } else {
            cell.heartButton.isSelected = false
        }
    }
}