// // ReportGenerator.swift // TournamentStats // // Created by Laurent Morvillier on 03/06/2019. // Copyright © 2019 Stax River. All rights reserved. // import Foundation import RealmSwift import Realm class ReportGenerator { static private let winnersDirectoryName: String = "reports/winners" func go() { let realm = try! Realm() try! realm.write { realm.deleteAll() } Seed.createTournaments() Importer.start() self.create() self.writeHTML() } func createDirectories() { // Create winners directory if necessary if let docDirectory = FileUtils.documentsDirectoryPath { let winnersDirectory = docDirectory.appendingPathComponent(ReportGenerator.winnersDirectoryName) var isDir: ObjCBool = true if !FileManager.default.fileExists(atPath: winnersDirectory.absoluteString, isDirectory: &isDir) { do { try FileManager.default.createDirectory(at: winnersDirectory, withIntermediateDirectories: true, attributes: nil) } catch { print(error) } } } } fileprivate var _biggestWinners: [CumulatedResults] = [] fileprivate var _mostWins: [CumulatedResults] = [] fileprivate var _mostCashes: [CumulatedResults] = [] fileprivate var _tournamentWinners: [TournamentWinner] = [] fileprivate var _tourniesByEntries: [TournamentRepresentable] = [] fileprivate var _tourniesByPrizepool: [TournamentRepresentable] = [] fileprivate var _winsByCountry: [CountryCounter] = [] fileprivate var _cashesByCountry: [CountryCounter] = [] fileprivate var _averageEvent: [TournamentStats] = [] fileprivate var _notablesMostCashes: [CumulatedResults] = [] fileprivate var _averageCash: [CumulatedResults] = [] fileprivate var _tournamentBuyinDistribution: [DistributionCounter] = [] fileprivate var _tournamentPrizepoolDistribution: [DistributionCounter] = [] fileprivate var _firstPrizeDistribution: [DistributionCounter] = [] fileprivate var _holdemTournamentsDistribution: [DistributionCounter] = [] func create() { self.createDirectories() let realm = try! Realm() self._biggestWinners = Queries.biggestWinners(realm: realm) self._mostWins = Queries.mostCashes(realm: realm, sort: .wins) self._mostCashes = Queries.mostCashes(realm: realm) self._tournamentWinners = Queries.allWinnersSortedByEvent(realm: realm) self._tourniesByEntries = Queries.sortedEvents(realm: realm, fieldName: "entries", ascending: false) self._tourniesByPrizepool = Queries.sortedEvents(realm: realm, fieldName: "prizepool", ascending: false) self._winsByCountry = Queries.winsByCountry(realm: realm) self._cashesByCountry = Queries.cashesByCountry(realm: realm) self._averageEvent = Queries.averageEvent(realm: realm) self._notablesMostCashes = Queries.mostCashes(realm: realm, notable: true) self._averageCash = Queries.averageCash(realm: realm) self._tournamentBuyinDistribution = Queries.tournamentBuyinDistribution(realm: realm) self._tournamentPrizepoolDistribution = Queries.tournamentPrizepoolDistribution(realm: realm) self._firstPrizeDistribution = Queries.firstPrizeDistribution(realm: realm) self._holdemTournamentsDistribution = Queries.holdemTournamentsDistribution(realm: realm) let tourniesDate = realm.objects(Tournament.self).distinct(by: ["date"]) // Individual days for tourny in tourniesDate { let date = tourny.date let fileDate = Formatter.fileDate.string(from: date) let dayWinners = Queries.allWinnersSortedByEvent(realm: realm, date: date) dayWinners.writeHTML(fileName: "reports/winners/bracelets_\(fileDate).html") let notableCashes = Queries.notableCashes(realm: realm, date: date) notableCashes.writeHTML(fileName: "reports/winners/notables_\(fileDate).html") } print("total player count = \(realm.objects(Player.self).count)") // 16203, 16129 } fileprivate func writeHTML() { self._biggestWinners.writeHTML(fileName: "reports/earningsLeaderboard.html") self._mostCashes.writeHTML(fileName: "reports/mostCashes.html", limit: 25) self._tournamentWinners.writeHTML(fileName: "reports/allWinners.html", limit: nil) self._tournamentWinners.writeHTML(fileName: "reports/allWinners_top10.html", limit: 10) self._tourniesByEntries.writeHTML(fileName: "reports/tourniesByEntries.html", limit: nil) self._tourniesByEntries.writeHTML(fileName: "reports/tourniesByEntries_top5.html", limit: 5) self._tourniesByPrizepool.writeHTML(fileName: "reports/tourniesByPrizepool.html", limit: nil) self._tourniesByPrizepool.writeHTML(fileName: "reports/tourniesByPrizepool_top5.html", limit: 5) self._winsByCountry.writeHTML(fileName: "reports/countryWins.html") self._cashesByCountry.writeHTML(fileName: "reports/countryCashes.html") self._averageEvent.writeHTML(fileName: "reports/averageEvent.html") self._notablesMostCashes.writeHTML(fileName: "reports/notablesMostCashes.html", limit: nil) self._averageCash.writeHTML(fileName: "reports/bestAverageCashes.html", limit: 5) self._tournamentBuyinDistribution.writeHTML(fileName: "reports/buyinDistribution.html") self._tournamentPrizepoolDistribution.writeHTML(fileName: "reports/prizepoolDistribution.html") self._firstPrizeDistribution.writeHTML(fileName: "reports/firstPrizeDistribution.html") self._holdemTournamentsDistribution.writeHTML(fileName: "reports/holdemDistribution.html") } }