aboutsummaryrefslogblamecommitdiff
path: root/foray/ForayTableViewController.swift
blob: 2732fceb880f63be36ed002b5a31b1b04f9d127b (plain) (tree)
1
2
3
4
5
6
7
8
9








                                         





                                                                 



                                                       





                                  
                            
        

                                                            


                                                                                                       








                                                                                                         



                                                 
                                                


                                                                                                             




                                             
















                                                                              
              

     



                                                                      
                                  


                                                                                                  

                                                     


                                                                                                             
                                                                        
        









                                           

                                                                                                                                                          
                                                                               



                                                                                                        



                                                                        
     
    

                                                                                     

                                                                                            

                                                                        
                                                                

                                                                                           
     
 
//
//  ForayTableViewController.swift
//  foray
//
//  Created by Nicholas Tay on 14/3/2022.
//

import UIKit

private func firstDayOfYear(date: Date) -> Date {
    let calendar = Calendar.current
    let components = calendar.dateComponents([.year], from: date)
    return calendar.date(from: components)!
}

class ForayTableViewController: UITableViewController {
    
    // MARK: - Static data TEMP
    
    var sections = [YearSection]()
    
    // MARK: - On load
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.title = "Foray"
        
        tableView.rowHeight = UITableView.automaticDimension
        
        // Register our custom cell
        tableView.register(ForayNewTableViewCell.self, forCellReuseIdentifier: "ForayNewTableViewCell")
        
        // Not sure if this is the right way to go about this...
        let alert = UIAlertController(title: nil, message: "Grabbing data...", preferredStyle: .alert)
        let loadingIndicator = UIActivityIndicatorView(frame: CGRect(x: 10, y: 5, width: 50, height: 50))
        loadingIndicator.hidesWhenStopped = true
        loadingIndicator.style = UIActivityIndicatorView.Style.medium
        loadingIndicator.startAnimating();
        alert.view.addSubview(loadingIndicator)
        present(alert, animated: true, completion: nil)
        
        reloadApiData()
        
        dismiss(animated: false, completion: nil)
        
        self.refreshControl = UIRefreshControl()
        self.refreshControl?.addTarget(self, action: #selector(doRefresh), for: UIControl.Event.valueChanged)
    }
    
    @objc func doRefresh(sender: AnyObject) {
        reloadApiData()
    }
    
    func reloadApiData() {
        ForayNetworkManager.shared.get(
            url: "https://users.windblume.net/~nick/upload/dummy.json",
            onComplete: { (apiItems: [PenguinItem]) in
                var items = apiItems
                items.sort { (lhs, rhs) in lhs.releaseDate < rhs.releaseDate }
                
                let groups = Dictionary(grouping: apiItems) { (item) in
                    return firstDayOfYear(date: item.releaseDate)
                }
                self.sections = groups.map { (key, values) in
                    return YearSection(year: key, items: values)
                }
                // Sort the sections from oldest year to newest
                self.sections.sort { (lhs, rhs) in lhs.year < rhs.year }
                
                self.tableView.reloadData()
                self.refreshControl?.endRefreshing()
            })
    }
    
    // MARK: - Table view data source

    override func numberOfSections(in tableView: UITableView) -> Int {
        // Returns number of sections for table
        return self.sections.count
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // Returns number of rows for table's section
        return self.sections[section].items.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let item = self.sections[indexPath.section].items[indexPath.row]
        
        let type: String
        let icon: UIImage
        switch item.type {
        case .item:
            type = "Item"
            icon = UIImage(named: item.id)!
        case .quest:
            type = "Quest"
            icon = UIImage(named: "spy")!
        }
        
        let cell: ForayNewTableViewCell = tableView.dequeueReusableCell(withIdentifier: "ForayNewTableViewCell", for: indexPath) as! ForayNewTableViewCell
        cell.setData(name: item.name, desc: type + "ID: " + item.id, img: icon)
        return cell
    }
    
    override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        let section = self.sections[section]
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy"
        return "Released in " + dateFormatter.string(from: section.year)
    }
    
    let detailViewController: ForayDetailViewController = ForayDetailViewController()
    
    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)
        
        let item = self.sections[indexPath.section].items[indexPath.row]
        detailViewController.setSelectedItem(selectedItem: item)
        
        self.navigationController?.pushViewController(detailViewController, animated: true)
    }
}