package Ġdev . y bon net ain . k intro . repositories Ċ Ċ import Ġdev . y bon net ain . k intro . LocalStorage Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . coroutines . flow . State Flow Ċ import Ġorg . k oin . core . component . K oin Component Ċ import Ġorg . k oin . core . component . inject Ċ Ċ interface ĠI Counter Ġ{ ĊĠĠĠ Ġfun Ġobserve Counter () Ġ: ĠState Flow < Int > ĊĠĠĠ Ġfun Ġincrement Counter () ĊĠĠĠ Ġfun Ġdecrement Counter () ĊĠĠĠ Ġfun Ġreset Counter () Ċ } Ċ Ċ class ĠCounter Ġ: ĠK oin Component , ĠI Counter Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġobserve Counter (): ĠState Flow < Int > Ġ= Ġcount ĊĊĠĠĠ Ġ// Ġn Ġ= Ġterm Ġposition Ġin Ġfib onacci Ġser ie ĊĠĠĠ Ġ// Ġwe Ġstart Ġwith Ġ 1 st Ġterm Ġfor Ġseed Ġ= Ġ( 0 , 1 ) Ġwhich Ġis Ġ 0 ĊĠĠĠ Ġ// ĊĠĠĠ Ġprivate Ġval Ġstorage : ĠLocal Storage Ġby Ġinject () ĊĠĠĠ Ġprivate Ġvar Ġn Ġ= Ġstorage . retrieve ( PER SIST ENCE _ KEY , Ġ" 1 "). toInt () ĊĠĠĠ Ġprivate Ġval Ġseed Ġ= ĠPair ( 0 , Ġ 1 ) ĊĠĠĠ Ġprivate Ġval Ġcount Ġ= ĠMutable State Flow ( fib onacci Value For Term ( n )) ĊĊĠĠĠ Ġoverride Ġfun Ġincrement Counter () Ġ{ ĊĠĠĠĠĠĠĠ Ġmove ( ++ n ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecrement Counter () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( n Ġ> Ġ 1 ) Ġn -- ĊĠĠĠĠĠĠĠ Ġmove ( n ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreset Counter () Ġ{ ĊĠĠĠĠĠĠĠ Ġn Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġmove ( n ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmove ( n : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstorage . persist ( PER SIST ENCE _ KEY , Ġn . toString ()) ĊĠĠĠĠĠĠĠ Ġcount . value Ġ= Ġfib onacci Value For Term ( n ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfib onacci Value For Term ( n : ĠInt ) Ġ= Ġgenerate Sequence ( ĊĠĠĠĠĠĠĠ Ġseed , Ġ{ ĠPair ( it . second , Ġit . first Ġ+ Ġit . second ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . first Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. take ( n ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. last () ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPER SIST ENCE _ KEY Ġ= Ġ" counter _ internal _ term " ĊĠĠĠ Ġ} Ċ } Ċ