package Ġio . ple o . ant ae us . core . services Ċ Ċ import Ġio . ple o . ant ae us . core . helpers . Billing Processor Ċ import Ġio . ple o . ant ae us . core . helpers . Billing Config Ċ Ċ import Ġjava . sql . Date Ċ import Ġjava . util . Timer Ċ import Ġkotlin . concurrent . timer Task ĊĊ Ċ class ĠBilling Service ( ĊĠĠĠ Ġprivate Ġval Ġbilling Processor : ĠBilling Processor , ĊĠĠĠ Ġprivate Ġval ĠgetNext Billing Date : Ġ() Ġ-> ĠDate , Ċ ){ ĊĠĠĠ Ġprivate Ġvar ĠisActive Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval Ġtimer Ġ= ĠTimer (" schedule ") ĊĊĠĠĠ Ġprivate Ġfun Ġprocess Un paid In voices () Ġ{ ĊĠĠĠĠĠĠĠ Ġbilling Processor . start New Billing Operation () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexecute Billing (){ ĊĠĠĠĠĠĠĠ Ġprocess Un paid In voices () ĊĠĠĠĠĠĠĠ Ġif Ġ( isActive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġschedule Next Billing () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġscheduler IsActive () Ġ: ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠisActive ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstop Billing Scheduler (){ ĊĠĠĠĠĠĠĠ ĠisActive Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġbilling Processor . close () ĊĠĠĠĠĠĠĠ Ġtimer . cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Billing Scheduler (){ ĊĠĠĠĠĠĠĠ ĠisActive Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġschedule Next Billing () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġschedule Next Billing () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnext Billing Date Ġ= ĠgetNext Billing Date () ĊĠĠĠĠĠĠĠ Ġtimer . schedule ( timer Task Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Billing () ĊĠĠĠĠĠĠĠ Ġ}, Ġnext Billing Date ) ĊĠĠĠ Ġ} Ċ } Ċ