package Ġcart Ċ Ċ import Ġkotlinx . serialization . Serializable Ċ Ċ @ Serializable Ċ data Ġclass ĠCart ( ĊĠĠĠ Ġval Ġuid : ĠString , ĊĠĠĠ Ġval Ġcurrency : ĠString , ĊĠĠĠ Ġval Ġitems : ĠMutable List < Item > Ċ ) Ġ{ ĊĠĠĠ Ġconstructor ( uid : ĠString , Ġcurrency : ĠString , Ġvar arg Ġitems : ĠItem ) Ġ: Ġthis ( uid , Ġcurrency , Ġitems . to Mutable List ()) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġthe Ġ[ item ] Ġto Ġthe Ġ[ Cart ] ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ Item ] Ġrepresentation Ġfound Ġin Ġthe Ġcart ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd ( item : ĠItem ): ĠItem Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġit Ġ= Ġitems . find Ġ{ Ġit . uid Ġ== Ġitem . uid Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( it Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġitem . copy () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġit . copy ( quantity Ġ= Ġit . quantity Ġ+ Ġitem . quantity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . remove ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemoves Ġthe Ġ[ item ] Ġor Ġsome Ġ[ Item . quantity ] Ġfrom Ġthe Ġ[ Cart ] Ġif Ġit Ġwas Ġcurrently Ġpresent Ġin Ġthe Ġcart ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ Item ] Ġrepresentation Ġfound Ġin Ġthe Ġcart Ġor Ġnull Ġif Ġthe Ġcart Ġis Ġleft Ġwithout Ġthe Ġitem ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove ( item : ĠItem ): ĠItem ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġitems . find Ġ{ Ġit . uid Ġ== Ġitem . uid Ġ} Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġitems . remove ( i ) ĊĠĠĠĠĠĠĠ Ġif Ġ( i . quantity Ġ>= Ġitem . quantity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġitem . copy ( quantity Ġ= Ġi . quantity Ġ- Ġitem . quantity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġi ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠT ot ally Ġ[ elim inate ] Ġthe Ġitem Ġwith Ġid Ġ[ itemId ] Ġfrom Ġthe Ġcart ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ Item ] Ġthat Ġwas Ġelim inated Ġfrom Ġthe Ġ[ Cart ] Ġor Ġnull Ġif Ġitem Ġwith ĊĠĠĠĠ Ġ* Ġ[ itemId ] Ġwas Ġnot Ġfound Ġin Ġthe Ġcart ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġeliminate ( itemId : ĠString ): ĠItem ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġitems . find Ġ{ Ġit . uid Ġ== ĠitemId Ġ} Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġitems . remove ( item ) ĊĠĠĠĠĠĠĠ Ġreturn Ġitem ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġsub Total Ġget () Ġ= Ġitems . sum Of Ġ{ Ġit . sub Total Ġ} ĊĠĠĠ Ġval Ġdiscount Total Ġget () Ġ= Ġitems . sum Of Ġ{ Ġit . discount Total Ġ} ĊĠĠĠ Ġval Ġgrand Total Ġget () Ġ= Ġitems . sum Of Ġ{ Ġit . grand Total Ġ} Ċ }