SharingHistoryViewController.swift 4.14 KB
//
//  SharingHistoryViewController.swift
//  SwiftWarplyFramework
//
//  Created by Manos Chorianopoulos on 18/7/22.
//

import UIKit

class SharingHistoryViewController: AnalysisChildViewController {

    var loading: Bool = false
    var items: Array<swiftApi.SharingCouponModel> = Array()
    var allItems: Array<swiftApi.SharingCouponModel> = Array()
    var showMore = false
    
    // TODO: remove this when configuring model
    let hasMessage = false
    
    // lifecycle
    override func viewDidLoad() {
        
        super.viewDidLoad()
        
        self.tableView.delegate = self
        self.tableView.dataSource = self
        
        self.refreshControl = UIRefreshControl()
        self.refreshControl?.addTarget(self, action: #selector(handleRefresh(_:)), for: .valueChanged)
        
        handleRefresh(self.refreshControl!)
    }
    
    // mvp
    @objc func load() {
    
        if (loading) {
            return;
        }
        
        showLoading()
        
        swiftApi().getSharingHistoryAsync(responseCallback)
    }
    
    private func showLoading() {
        
        loading = true
        if (self.refreshControl!.isRefreshing) {
            return;
        }
        
        self.refreshControl!.beginRefreshing()
    }
    
    private func showError() {
    }
    
    private func showContent() {
        
        loading = false
        self.refreshControl!.endRefreshing()
    }
    
    // private
    func responseCallback (_ data: Array<swiftApi.SharingCouponModel>?) -> Void {
        
        self.items = data!
        self.allItems = data!
        self.showMore = (self.items.count > 3)
        
        if (self.showMore == true) {
            self.items = Array(self.items[0...2])
        }
        showContent()
        DispatchQueue.main.async {
           self.tableView.reloadData()
       }
    }
    
    @objc func handleRefresh(_ refreshControl: UIRefreshControl) {
        
        self.perform(_: #selector(load), with: nil, afterDelay: 0.5)
    }

    // MARK: - Table view data source
    override func numberOfSections(in tableView: UITableView) -> Int {
        return 2
    }
    
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if (section == 0) {
            return 1;
        }
        
        if (self.showMore == true) {
            return 4
        }
        return items.count
    }
    
    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        if (indexPath.section == 0) {
            return hasMessage ? 380.0 : (items.count > 0 ? 280 : 380)
        }
        
        return 140.0
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        // header
        if (indexPath.section == 0) {
            if (hasMessage) {
                return tableView.dequeueReusableCell(withIdentifier: "AnalysisHeaderMessageViewCell", for: indexPath) as! SwiftWarplyFramework.AnalysisHeaderMessageViewCell
            }
            
            let cell = tableView.dequeueReusableCell(withIdentifier: "AnalysisHeaderViewCell", for: indexPath) as! SwiftWarplyFramework.AnalysisHeaderViewCell
            cell.configureCell(isEmpty: items.count == 0)
            return cell
        }
        
        if ((self.showMore == true) && (indexPath.row == 3)) {
            let cell = tableView.dequeueReusableCell(withIdentifier: "AnalysisMoreViewCell", for: indexPath) as! SwiftWarplyFramework.AnalysisMoreViewCell
            return cell
        }
        
        let cell = tableView.dequeueReusableCell(withIdentifier: "AnalysisItemViewCell", for: indexPath) as! SwiftWarplyFramework.AnalysisItemViewCell
        cell.configureCell(item: items[indexPath.row])
        
        return cell
    }
    
    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if (indexPath.section == 0) {
            return
        }
        
        if ((self.showMore == true) && (indexPath.row == 3)) {
            self.items = self.allItems
            self.showMore = false
            self.tableView.reloadData()
        }
    }
}