// // CumulatedResults.swift // TournamentStats // // Created by Laurent Morvillier on 03/06/2019. // Copyright © 2019 Stax River. All rights reserved. // import Foundation class CumulatedResults : HTMLRepresentable, ColumnRepresentable { enum Options { case average case countSorted case finalTables } let player: Player var options: [Options] = [] // var average: Bool = false var finalTables: Bool = false var total: Double = 0.0 var numberOfCashes: Int = 0 var results: [Result] = [] var winsCount: Int = 0 var mainEventFinalist: Bool = false init (player: Player, results: [Result], options: [Options] = []) { self.player = player self.options = options self.options.append(.finalTables) for result in results { self.add(result: result) } } init(player: Player, options: [Options] = []) { self.player = player self.options = options // self.average = average for result in player.results { self.add(result: result) } if self.options.contains(.average) { self.total = self.total / Double(self.numberOfCashes) } } private func add(result: Result) { if result.tournaments.first?.number == 73 && result.rank < 10 { self.mainEventFinalist = true } self.total += result.earnings self.numberOfCashes += 1 self.results.append(result) if result.rank == 1 { self.winsCount += 1 } } func columnDescriptors() -> [ColumnDescriptor] { let totalColumn = self.options.contains(.finalTables) ? "FT Earnings" : self.options.contains(.average) ? "Average Earnings" : "Total Earnings" let countable = self.finalTables ? "Count" : "Cashes" if self.options.contains(.countSorted) { return [ColumnDescriptor(header: "Name", number: false, widthWeight: 2.0), ColumnDescriptor(header: countable, number: true, widthWeight: 0.8), ColumnDescriptor(header: totalColumn, number: true, widthWeight: 1.3)] } else { return [ColumnDescriptor(header: "Name", number: false, widthWeight: 2.0), ColumnDescriptor(header: totalColumn, number: true, widthWeight: 1.3), ColumnDescriptor(header: countable, number: true, widthWeight: 0.8)] } } func cellValues() -> [String] { var name = self.player.formattedName if self.mainEventFinalist { name += " *" } if self.options.contains(.countSorted) { return [name, "\(self.numberOfCashes)", self.total.currencyFormatted] } else { return [name, self.total.currencyFormatted, "\(self.numberOfCashes)"] } } // func htmlHeaders() -> String { // var strings: [String] = [] // strings.append("Name") //// strings.append("Places (Year)") // strings.append("Total Earnings") // strings.append("Cashes") // let all = strings.joined(separator: "