package Ġcom . del bel . bull sco ws . session . presentation . menu Ċ Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . as LiveData Ċ import Ġandroidx . lifecycle . live Data Ċ import Ġcom . del bel . bull sco ws . game . domain . Game Id Ċ import Ġcom . del bel . bull sco ws . game . domain . repository . Game Repository Ċ import Ġcom . del bel . bull sco ws . session . domain . repository . Current Session Repository Ċ import Ġcom . del bel . bull sco ws . session . domain . repository . Session Repository Ċ import Ġkotlinx . coroutines . flow . first Ċ import Ġkotlinx . coroutines . flow . map Ċ import Ġjavax . inject . Inject Ċ Ċ internal Ġclass ĠMenu ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġcurrent Session Repository : ĠCurrent Session Repository , ĊĠĠĠ Ġprivate Ġval Ġsession Repository : ĠSession Repository , ĊĠĠĠ Ġprivate Ġval Ġgame Repository : ĠGame Repository Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġval Ġsession State Ġ= Ġcurrent Session Repository . obtain SessionId () ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġsession Ġ-> Ġif Ġ( session Ġ== Ġnull ) ĠNo Session Ġelse ĠRunning Session Ġ} ĊĠĠĠĠĠĠĠ Ġ. as LiveData () ĊĊĠĠĠ Ġfun Ġcreate () Ġ= Ġlive Data Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgame Id Ġ= Ġgame Repository . create () ĊĠĠĠĠĠĠĠ Ġval ĠsessionId Ġ= Ġsession Repository . create () ĊĊĠĠĠĠĠĠĠ Ġcurrent Session Repository . register ( sessionId , Ġgame Id ) ĊĠĠĠĠĠĠĠ Ġemit ( value Ġ= ĠNew Session ( sessionId , Ġgame Id )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcontinue Game () Ġ= Ġlive Data Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgame Id Ġ= Ġcurrent Session Repository . obtain Game Id (). first () Ġ?: Ġcreate Game And Save It On Session () ĊĠĠĠĠĠĠĠ Ġemit ( value Ġ= Ġgame Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġcreate Game And Save It On Session (): ĠGame Id Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgame Id Ġ= Ġgame Repository . create () ĊĠĠĠĠĠĠĠ Ġcurrent Session Repository . update Game Id ( game Id ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġgame Id ĊĠĠĠ Ġ} Ċ }