package Ġorg . o jac que mart . e uro b ets . firebase . management . match . stat Ċ Ċ import Ġorg . o jac que mart . e uro b ets . firebase . management . table . Bet Ċ import Ġorg . o jac que mart . e uro b ets . firebase . management . table . Bet Data Ċ import Ġorg . o jac que mart . e uro b ets . firebase . management . table . Result Ċ import Ġorg . o jac que mart . e uro b ets . firebase . support . Score Type Ċ import Ġkotlin . comp arisons . compare By Ċ import Ġkotlin . comp arisons . then By Ċ Ċ class ĠStat Mapper Ġ{ ĊĊĠĠĠ Ġfun Ġmap ( b ets Data : ĠList < Bet Data >): ĠStat Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmatch Ġ= Ġbet s Data [ 0 ]. match !! ĊĊĠĠĠĠĠĠĠ Ġval Ġnon Null B ets Ġ= Ġbet s Data . filter Ġ{ Ġit . bet Ġ!= Ġnull Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbet s Ġ= Ġnon Null B ets . map Ġ{ Ġit . bet !! Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnb B ets Ġ= Ġbet s . size ĊĊĠĠĠĠĠĠĠ Ġval Ġgood Feel ing L uck y Percentage Ġ= Ġgood Feel ing L uck y Percentage ( non Null B ets , Ġnb B ets ) ĊĠĠĠĠĠĠĠ Ġval Ġlast Bet Timestamp Ġ= Ġbet s . map Ġ{ Ġit . timestamp Ġ}. max () Ġ?: Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġbet Result Ġ= Ġbet Result ( non Null B ets , Ġnb B ets ) ĊĠĠĠĠĠĠĠ Ġval Ġwinner Re partition Ġ= Ġwinner Re partition ( non Null B ets , Ġnb B ets ) ĊĠĠĠĠĠĠĠ Ġval Ġscores Ġ= Ġscores ( b ets , Ġnb B ets ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠStat ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatch Number Ġ= Ġmatch . number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnb B ets Ġ= Ġnb B ets , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgood Feel ing L uck y Percentage Ġ= Ġgood Feel ing L uck y Percentage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Bet Timestamp Ġ= Ġlast Bet Timestamp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbet s Result Ġ= Ġbet Result , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwinner Ġ= Ġwinner Re partition , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscores Ġ= Ġscores , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġmatch . timestamp ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġscores ( b ets : ĠList < Bet >, Ġnb B ets : ĠInt ): ĠList < Stat . Score > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscores By Home And AW ay Ġ= Ġbet s . map Ġ{ Ġit Ġ-> ĠStat . Score ( home Go als Ġ= Ġit . home Go als , Ġaway Go als Ġ= Ġit . away Go als , Ġpercentage Ġ= Ġ 0 F ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. groupBy Ġ{ Ġit Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcomparator Ġ= Ġcompare By < Stat . Score > Ġ{ Ġ- it . percentage Ġ}. then By Ġ{ Ġit . home Go als Ġ+ Ġit . away Go als Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġscores By Home And AW ay . map Ġ{ Ġscore Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscore Percentage Ġ= Ġpercentage ( score . value . size , Ġnb B ets ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġscore . key . copy ( percentage Ġ= Ġscore Percentage ) ĊĠĠĠĠĠĠĠ Ġ}. sorted With ( comparator ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgood Feel ing L uck y Percentage ( non Null B ets : ĠList < Bet Data >, Ġnb B ets : ĠInt ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġperfect And Feel ing L uck B ets Ġ= Ġnon Null B ets ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġit . getResult () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult !!. has Reported Points () Ġ&& Ġit . bet !!. fe el ing L uck y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. size ĊĊĠĠĠĠĠĠĠ Ġreturn Ġpercentage ( perfect And Feel ing L uck B ets , Ġnb B ets ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbet Result ( non Null B ets : ĠList < Bet Data >, Ġnb B ets : ĠInt ): ĠStat . Bet Result Re partition Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbet sBy Result Ġ= Ġnon Null B ets . map Ġ{ Ġit . getResult () !! Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. groupBy Ġ{ Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit Ġ-> ĠPair ( it . key , Ġpercentage ( it . value . or Empty (). size , Ġnb B ets )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. associate By ({ Ġit . first Ġ}, Ġ{ Ġit . second Ġ}) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠStat . Bet Result Re partition ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperfect Ġ= Ġbet sBy Result [ Result . PERF ECT ] Ġ?: Ġ 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgood Gap Ġ= Ġbet sBy Result [ Result . GO OD _ GAP ] Ġ?: Ġ 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgood Ġ= Ġbet sBy Result [ Result . GO OD ] Ġ?: Ġ 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbad Ġ= Ġbet sBy Result [ Result . BAD ] Ġ?: Ġ 0 F ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġwinner Re partition ( non Null B ets : ĠList < Bet Data >, Ġnb B ets : ĠInt ): ĠStat . Winner Re partition Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwinner By Score Type Ġ= Ġnon Null B ets . groupBy Ġ{ Ġit . bet !!. get Score Type () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit Ġ-> ĠPair ( it . key , Ġpercentage ( it . value . or Empty (). size , Ġnb B ets )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. associate By ({ Ġit . first Ġ}, Ġ{ Ġit . second Ġ}) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠStat . Winner Re partition ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhome Ġ= Ġwinner By Score Type [ Score Type . HOME _ WIN NER ] Ġ?: Ġ 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Ġ= Ġwinner By Score Type [ Score Type . DRAW ] Ġ?: Ġ 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaway Ġ= Ġwinner By Score Type [ Score Type . AW AY _ WIN NER ] Ġ?: Ġ 0 F ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġpercentage ( value : ĠInt , Ġdivider : ĠInt ): ĠFloat Ġ= Ġvalue . toFloat (). div ( divider ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ