// // CumulatedResults.swift // TournamentStats // // Created by Laurent Morvillier on 03/06/2019. // Copyright © 2019 Stax River. All rights reserved. // import Foundation struct BestAverageCash { var minimumCashes: Int var results: [CumulatedResults] = [] } class CumulatedResults : HTMLRepresentable, ColumnRepresentable { enum Options { case average case countSorted case finalTables case moreThan10KNotMainEvent } let player: Player var options: [Options] = [] 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 for result in player.results { guard let tournament = result.tournaments.first else { continue } let tournamentBuyin: Int = tournament.buyin if self.options.contains(.moreThan10KNotMainEvent) { if tournamentBuyin >= 10000 && !tournament.isMainEvent { self.add(result: result) } } else { 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?.isMainEvent == true && 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)"] } } }