aboutsummaryrefslogtreecommitdiff
path: root/foray/ForayTableViewController.swift
blob: 2732fceb880f63be36ed002b5a31b1b04f9d127b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
//
//  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)
    }
}