package net.pokeranalytics.android.calculus import android.content.Context import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface import net.pokeranalytics.android.ui.adapter.components.RowViewType interface AnyStat { } enum class Stat : AnyStat, DynamicRowInterface { NETRESULT, HOURLY_RATE, AVERAGE, NUMBER_OF_GROUPS, NUMBER_OF_GAMES, DURATION, AVERAGE_DURATION, NET_BB_PER_100_HANDS, HOURLY_RATE_BB, AVERAGE_NET_BB, WIN_RATIO, AVERAGE_BUYIN, ROI, STANDARD_DEVIATION, STANDARD_DEVIATION_HOURLY, STANDARD_DEVIATION_BB_PER_100_HANDS, HANDS_PLAYED; fun label() : String = when (this) { NETRESULT -> "" HOURLY_RATE -> "" else -> throw IllegalArgumentException("Label not defined") } fun hasDistributionSorting() : Boolean { when (this) { STANDARD_DEVIATION, STANDARD_DEVIATION_HOURLY, STANDARD_DEVIATION_BB_PER_100_HANDS -> return true else -> return false } } companion object { fun returnOnInvestment(netResult: Double, buyin: Double) : Double { return netResult / buyin } fun netBBPer100Hands(netBB: Double, numberOfHands: Double) : Double { return netBB / numberOfHands * 100 } } override fun localizedTitle(context: Context): String { return "Test" } override val viewType: Int = RowViewType.TITLE_VALUE.ordinal } enum class CashSessionStat : AnyStat { NETBB, AVERAGEBB } class ComputedStat(stat: Stat, value: Double) { constructor(stat: Stat, value: Double, previousValue: Double?) : this(stat, value) { if (previousValue != null) { this.variation = (value - previousValue) / previousValue } } // The statistic type var stat: Stat = stat // The stat value var value: Double = value // The variation of the stat var variation: Double? = null // The data points leading to the current stat value // var points: List = mutableListOf() // Formats the value of the stat to be suitable for display fun format() : StatFormat { return StatFormat() } fun evolutionValueFormat(index: Int) : StatFormat { return StatFormat() } }