/* Ċ Ġ* ĠCopyright Ġ 2 0 2 2 ĠP era ĠWallet , ĠL DA Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense Ċ Ġ*/ Ċ Ċ package Ġcom . al gor and . android . use case Ċ Ċ import Ġcom . al gor and . android . mapper . Account Balance Mapper Ċ import Ġcom . al gor and . android . models . Account Balance Ċ import Ġcom . al gor and . android . models . Account Detail Ċ import Ġjava . math . BigDecimal Ċ import Ġjavax . inject . Inject Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . map Ċ Ċ class ĠAccount Total Balance UseCase Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġaccount Asset Data UseCase : ĠAccount Asset Data UseCase , ĊĠĠĠ Ġprivate Ġval Ġaccount Balance Mapper : ĠAccount Balance Mapper , ĊĠĠĠ Ġprivate Ġval Ġaccount Detail UseCase : ĠAccount Detail UseCase Ċ ) Ġ{ ĊĊĠĠĠ Ġfun Ġget Account Balance ( account : ĠAccount Detail ): ĠAccount Balance Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġalgo Hold ings In Selected Currency Ġ= ĠBigDecimal . ZERO ĊĠĠĠĠĠĠĠ Ġvar Ġasset Hold ings In Selected Currency Ġ= ĠBigDecimal . ZERO ĊĠĠĠĠĠĠĠ Ġvar Ġtotal Asset Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġaccount Asset Data UseCase . get Non Cached Account Asset Data ( account , Ġtrue ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . is Algo ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalgo Hold ings In Selected Currency Ġ+= Ġit . amount In Selected Currency ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġasset Hold ings In Selected Currency Ġ+= Ġit . amount In Selected Currency ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Asset Count ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġaccount Balance Mapper . map To Account Balance ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalgo Hold ings In Selected Currency Ġ= Ġalgo Hold ings In Selected Currency , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġasset Hold ings In Selected Currency Ġ= Ġasset Hold ings In Selected Currency , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Asset Count ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Account Balance Flow ( publicKey : ĠString ): ĠFlow < Account Balance ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġaccount Detail UseCase . get Account Detail Cache Flow (). map Ġ{ Ġaccounts Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccounts [ publicKey ]?. data ?. let Ġ{ Ġget Account Balance ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ