package Ġorg . o jac que mart . e uro b ets . firebase . management . table Ċ Ċ import Ġkotlin . comp arisons . compare By Ċ import Ġkotlin . comp arisons . then By Ċ Ċ class ĠTable Calculator ( val Ġbet s : ĠList < Bet Data >, Ġval Ġrecent s Size : ĠInt Ġ= ĠTable Calculator . REC ENTS _ SIZE ) Ġ{ ĊĊĠĠĠ Ġfun Ġget Rows (): ĠList < TableRow > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtable Rows Ġ= Ġget Table Rows () ĊĠĠĠĠĠĠĠ Ġval Ġpositions Ġ= ĠTable Row . get Positions ( table Rows ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrows With Position Ġ= Ġtable Rows ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġpositions . indexOf ( it . points ) Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast 1 0 Recent s Ġ= Ġit . recent s . take Last ( recent s Size ). to Typed Array () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( position Ġ= Ġposition , Ġrecent s Ġ= Ġlast 1 0 Recent s ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Not Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġundefined Recent s Ġ= Ġit . recent s . filter Ġ{ Ġit Ġ== ĠResult . UNDEFINED . id Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġundefined Recent s . size Ġ== Ġrecent s Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġrows With Position . sorted With ( COMP AR ATOR ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Table Rows (): ĠList < TableRow > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbet s . groupBy Ġ{ Ġbet Ġ-> Ġbet . user Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġentry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġentry . key !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbet s Ġ= Ġentry . value ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbet s . filter Ġ{ Ġit . user !!. uid . equals ( user . uid ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġbet Ġ-> Ġreduce ( bet ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreduce ( b ets : ĠList < Bet Data >): ĠTable Row Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtable Row Ġ= Ġbet s . map Ġ{ Ġbet Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġbet . user !! ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Points Ġ= Ġbet . getResult Points () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġresult Points ?. result ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠTable Row ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuid Ġ= Ġuser . uid , ĠdisplayName Ġ= Ġuser . displayName , Ġprofile Image URL Ġ= Ġuser . profile Image URL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoints Ġ= Ġresult Points ?. points Ġ?: Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbet s Ġ= Ġif Ġ( result Ġ!= Ġnull ) Ġ 1 Ġelse Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpercentage Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperfect s Ġ= Ġif Ġ( result Ġ== ĠResult . PERF ECT ) Ġ 1 Ġelse Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgood G aps Ġ= Ġif Ġ( result Ġ== ĠResult . GO OD _ GAP ) Ġ 1 Ġelse Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoods Ġ= Ġif Ġ( result Ġ== ĠResult . GO OD ) Ġ 1 Ġelse Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbad s Ġ= Ġif Ġ( result Ġ== ĠResult . BAD ) Ġ 1 Ġelse Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecent s Ġ= ĠarrayOf ( if Ġ( result Ġ!= Ġnull ) Ġresult . id Ġelse ĠResult . UNDEFINED . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. reduce Ġ{ Ġcurrent , Ġnext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoints Ġ= Ġcurrent . points Ġ+ Ġnext . points , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbet s Ġ= Ġcurrent . b ets Ġ+ Ġnext . b ets , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpercentage Ġ= ĠTable Row . percentage ( next , Ġcurrent ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperfect s Ġ= Ġcurrent . perfect s Ġ+ Ġnext . perfect s , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgood G aps Ġ= Ġcurrent . good G aps Ġ+ Ġnext . good G aps , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoods Ġ= Ġcurrent . goods Ġ+ Ġnext . goods , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbad s Ġ= Ġcurrent . bad s Ġ+ Ġnext . bad s , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecent s Ġ= Ġcurrent . recent s . plus ( next . recent s [ 0 ])) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġwinner Bet Ġ= Ġbet s . filter Ġ{ Ġit . winner Ġ!= Ġnull Ġ}. get OrNull ( 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġwinner Points Ġ= Ġwinner Bet ?. get Fin ale Points () Ġ?: Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtable Row . copy ( points Ġ= Ġtable Row . points Ġ+ Ġwinner Points , Ġwinner Ġ= Ġwinner Bet ?. winner ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval ĠREC ENTS _ SIZE Ġ= Ġ 1 0 ĊĊĠĠĠĠĠĠĠ Ġval ĠCOMP AR ATOR Ġ= Ġcompare By < TableRow > Ġ{ Ġit . position Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. then By Ġ{ Ġ- it . b ets Ġ}. then By Ġ{ Ġ- it . perfect s Ġ}. then By Ġ{ Ġ- it . good G aps Ġ}. then By Ġ{ Ġ- it . goods Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. then By Ġ{ Ġit . displayName Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ