package Ġcom . dev _ vl ad . car _ v . view _ models . deal ers . details Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . dev _ vl ad . car _ v . R Ċ import Ġcom . dev _ vl ad . car _ v . models . persistence . auth . User Entity Ċ import Ġcom . dev _ vl ad . car _ v . models . persistence . auth . User Repo Ċ import Ġcom . dev _ vl ad . car _ v . models . persistence . cars . Car Entity Ċ import Ġcom . dev _ vl ad . car _ v . models . persistence . cars . Car Repo Ċ import Ġcom . dev _ vl ad . car _ v . models . persistence . offers . Car Offer Entity Ċ import Ġcom . dev _ vl ad . car _ v . models . persistence . offers . Offers Repo Ċ import Ġcom . dev _ vl ad . car _ v . util . My Logger Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ Ċ class ĠCar Details ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġuser Repo : ĠUser Repo , ĊĠĠĠ Ġprivate Ġval Ġcar Repo : ĠCar Repo , ĊĠĠĠ Ġprivate Ġval Ġoffers Repo : ĠOff ers Repo Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĊĠĠĠ Ġ// STATE ĊĠĠĠ Ġenum Ġclass ĠSTATE Ġ{ ĊĠĠĠĠĠĠĠ ĠID LE , ĊĠĠĠĠĠĠĠ ĠINITIAL IZ ING , ĊĠĠĠĠĠĠĠ ĠINITIAL IZED , ĊĠĠĠĠĠĠĠ ĠS ENDING , ĊĠĠĠĠĠĠĠ ĠS ENT , ĊĠĠĠĠĠĠĠ ĠERROR ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar ĠerrMsg : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġsending Offer State Ġ= ĠMutable LiveData < STATE >( STATE . IDLE ) ĊĊĊĠĠĠ Ġ// OFF ER ĠDATA ĊĠĠĠ Ġprivate Ġvar Ġoffer Wrapper : ĠOffer Wrapper ? Ġ= Ġnull ĊĠĠĠ Ġfun Ġget Initial Offer If Exist () Ġ= Ġoffer Wrapper ?. offer ?. offer Price ĊĠĠĠ Ġfun Ġget Car Data () Ġ= Ġoffer Wrapper !!. car ĊĠĠĠ Ġfun Ġfetch Car And Offer Details ( car Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsending Offer State . value Ġ= ĠSTATE . INITIAL IZ ING ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeal er Ġ= Ġuser Repo . get Non Observable User ()[ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcar Ġ= Ġcar Repo . get Non Observable Car Details ById ( car Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmy Offer Ġ= Ġoffers Repo . get My Non Observable Offer If Exist ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcar Id Ġ= Ġcar !!. car Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġowner Id Ġ= Ġcar . owner Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeal ers Id Ġ= Ġdeal er . userId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffer Wrapper Ġ= ĠOffer Wrapper ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcar Ġ= Ġcar , Ġdeal er Ġ= Ġdeal er , Ġoffer Ġ= Ġmy Offer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsending Offer State . value Ġ= ĠSTATE . INITIAL IZED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMy Logger . log This ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , Ġ" fetch Car Details ()", Ġ" EX C ĠR AI SED Ġ${ exception . message }", Ġexception ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrMsg Ġ= ĠR . string . failed _ to _ init _ car _ details ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffer Wrapper Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsending Offer State . value Ġ= ĠSTATE . ERROR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġobserve Offer State (): ĠLive Data < STATE > Ġ= Ġsending Offer State ĊĠĠĠ Ġfun Ġis Sending Offer (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsending Offer State . value Ġ== ĠSTATE . SEND ING ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave Offer ( initial Offer Price : ĠInt , Ġmessage : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsending Offer State . value Ġ= ĠSTATE . SEND ING ĊĠĠĠĠĠĠĠ Ġval Ġcar Ġ= Ġoffer Wrapper ?. car ĊĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= Ġoffer Wrapper ?. de aler ?. userId ĊĠĠĠĠĠĠĠ Ġval Ġoffer Id Ġ= Ġoffer Wrapper ?. offer ?. offer Id Ġ?: Ġ"" Ġ// TO ĠBE ĠSET ĠD UR ING ĠSAVE ĠBY ĠFI RE BASE ĊĠĠĠĠĠĠĠ Ġval Ġprev Price Ġ= Ġoffer Wrapper ?. offer ?. offer Price ĊĠĠĠĠĠĠĠ Ġif Ġ( initial Offer Price Ġ== Ġprev Price ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsending Offer State . value Ġ= ĠSTATE . SENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( car Ġ!= Ġnull Ġ&& ĠuserId Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Offer Ġ= ĠCar Offer Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffer Id Ġ= Ġoffer Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeal er Id Ġ= ĠuserId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġowner Id Ġ= Ġcar . owner Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcar Id Ġ= Ġcar . car Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠupdatedAt Ġ= ĠSystem . currentTimeMillis (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffer Price Ġ= Ġinitial Offer Price , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffer Message Ġ= Ġmessage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Sent Ġ= Ġoffers Repo . add Offer ( new Offer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Sent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsending Offer State . value Ġ= ĠSTATE . SENT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsending Offer State . value Ġ= ĠSTATE . ERROR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMy Logger . log This ( TAG , Ġ" save Offer ", Ġ" car Ġis Ġnull !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsending Offer State . value Ġ= ĠSTATE . ERROR ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠCar Details ViewModel :: class . java . simple Name ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠOffer Wrapper ( ĊĠĠĠ Ġval Ġcar : ĠCar Entity , ĊĠĠĠ Ġval Ġoffer : ĠCar Offer Entity ?, ĊĠĠĠ Ġval Ġdeal er : ĠUser Entity Ċ )