package Ġcom . die gop arra . ve gg ie . order . use cases Ċ Ċ import Ġcom . die gop arra . ve gg ie . core . kotlin . Either Ċ import Ġcom . die gop arra . ve gg ie . order . domain . Default Config Values Ċ import Ġcom . die gop arra . ve gg ie . order . domain . Delivery Base Cost s Ċ import Ġcom . die gop arra . ve gg ie . order . domain . Delivery Schedule Ċ import Ġcom . die gop arra . ve gg ie . order . domain . Order Repository Ċ import Ġcom . die gop arra . ve gg ie . user . address . domain . Address Ċ import Ġkotlinx . coroutines .* Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . time . LocalDate Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠGet Delivery Cost UseCase Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġorder Repository : ĠOrder Repository Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġdelivery Base Cost s : ĠDelivery Base Cost s ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġdefault Delivery Base Cost s Ġ= ĠDelivery Base Cost s ( ĊĠĠĠĠĠĠĠ Ġbase Cost Ġ= ĠDefault Config Values . delivery Cost Base , ĊĠĠĠĠĠĠĠ Ġextra Cost On Same Day Ġ= ĠDefault Config Values . delivery Cost Extra Same Day ĊĠĠĠ Ġ) ĠĠ Ġ// Ġ ĠUsed Ġwhen Ġgetting Ġan Ġexception Ġfrom Ġremote Config Api , Ġsuch Ġas Ġwhen Ġthere Ġis Ġno Ġinternet ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġget Delivery Base Cost s (): ĠDelivery Base Cost s Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdelivery Base Cost s ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġwhen Ġ( val Ġrepo Value Ġ= Ġorder Repository . get Delivery Base Cost s ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEither . Left Ġ-> Ġdefault Delivery Base Cost s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEither . Right Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelivery Base Cost s Ġ= Ġrepo Value . b ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepo Value . b ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġoperator Ġfun Ġinvoke ( delivery Schedule : ĠDelivery Schedule ?, Ġaddress : ĠAddress ?): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbase Cost Ġ= Ġget Base Cost () ĊĠĠĠĠĠĠĠ Ġval ĠdateTime Extra Cost Ġ= Ġdelivery Schedule ?. let Ġ{ Ġget Extra Cost Delivery DateTime ( it ) Ġ} Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġaddress Extra Cost Ġ= Ġaddress ?. let Ġ{ Ġget Extra Cost Address ( it ) Ġ} Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠ ĠTim ber . d (" delivery Cost Ġ= Ġ$ base Cost Ġ+ Ġ$ dateTime Extra Cost Ġ+ Ġ$ address Extra Cost ") ĊĠĠĠĠĠĠĠ Ġreturn Ġbase Cost Ġ+ ĠdateTime Extra Cost Ġ+ Ġaddress Extra Cost ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġget Base Cost (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Delivery Base Cost s (). base Cost ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġget Extra Cost Delivery DateTime ( delivery Schedule : ĠDelivery Schedule ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Date Ġ= ĠLocalDate . now () ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( current Date . compareTo ( delivery Schedule . date ) Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Delivery Base Cost s (). extra Cost On Same Day ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Extra Cost Address ( address : ĠAddress ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} Ċ Ċ }