package Ġtick etch ain . mobile . user . services Ċ Ċ import Ġandroidx . compose . animation . Experimental Animation Api Ċ import Ġandroidx . navigation . Nav Controller Ċ import Ġandroidx . navigation . compose . remember Nav Controller Ċ import Ġtick etch ain . mobile . user . api . Ticket Chain Api Ċ import Ġtick etch ain . mobile . user . data .* Ċ import Ġtick etch ain . mobile . user . state . AppState Ċ import Ġtick etch ain . mobile . user . storage . UserData Service Ċ import Ġtick etch ain . mobile . user . views . screens . Dashboard Screen Ċ import Ġtick etch ain . mobile . user . views . screens . Notifications Screen Ċ import Ġtick etch ain . mobile . user . views . screens . Settings Screen Ċ import Ġtick etch ain . mobile . user . views . screens . Ticket Screen Ċ Ċ class ĠAccount Service ( ĊĠĠĠ Ġval Ġapi : ĠTicket Chain Api , ĊĠĠĠ Ġprivate Ġval Ġuser DataService : ĠUser DataService , ĊĠĠĠ Ġval Ġstate : ĠApp State Ċ ) Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġnav Controller : ĠNav Controller ĊĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* ĠAPI ĠST UFF ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġ@ Experimental Animation Api ĊĠĠĠ Ġsuspend Ġfun Ġrequest Ticket () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġapi . request Ticket ( state . name Ġ?: Ġ"") ĊĠĠĠĠĠĠĠ Ġstate . my Ticket Ġ= Ġresponse . ticket . Id ĊĊĠĠĠĠĠĠĠ Ġnav Controller . back Queue . clear () ĊĠĠĠĠĠĠĠ Ġnav Controller . navigate ( Ticket Screen . route ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġcount Tickets () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġapi . count Tickets () ĊĠĠĠĠĠĠĠ Ġstate . count Tickets Ġ= Ġresponse . ticket Count ĊĠĠĠĠĠĠĠ Ġstate . wait Time Ġ= Ġresponse . wait Time ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun ĠgetCurrent Ticket () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġapi . getCurrent Ticket () ĊĠĠĠĠĠĠĠ Ġstate . current Ticket Ġ= Ġresponse . current Ticket ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġhas Issues () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġapi . has Issues () ĊĠĠĠĠĠĠĠ Ġstate . alert Ġ= Ġresponse . has Issues ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġhas Ticket () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġapi . has Ticket ( state . name Ġ?: Ġ"") ĊĠĠĠĠĠĠĠ Ġif Ġ(! response . has Ticket ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . my Ticket Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* ĠAC COUNT ĠST UFF ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġsuspend Ġfun Ġload Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠuserData Ġ= Ġuser DataService . getUser Data () ĊĠĠĠĠĠĠĠ Ġstate . name Ġ= ĠuserData . name ĊĠĠĠĠĠĠĠ Ġstate . theme Ġ= ĠTheme . from Value ( userData . theme ) ĊĠĠĠĠĠĠĠ Ġstate . widgets . clear () ĊĠĠĠĠĠĠĠ Ġstate . widgets . addAll ( userData . widgets List . map Ġ{ ĠWidget . from Value ( it ) !! Ġ}) ĊĠĠĠĠĠĠĠ Ġstate . my Ticket Ġ= ĠuserData . current Ticket . toInt OrNull () ĊĠĠĠĠĠĠĠ Ġstate . notifications Enabled Ġ= ĠuserData . notifications Enabled ĊĠĠĠĠĠĠĠ Ġstate . notifications . clear () ĊĠĠĠĠĠĠĠ Ġstate . notifications . addAll ( userData . notifications List . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNotification ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrigger Type Ġ= ĠNotification Trigger . from Value ( it . type ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthreshold Ġ= Ġit . threshold , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenabled Ġ= Ġit . enabled , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrequency Ġ= ĠNotification . frequency FromString ( it . week days ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinterval Ġ= Ġif Ġ( it . start Hour Ġ> Ġ- 1 Ġ&& Ġit . end Hour Ġ> Ġ- 1 ) ĠNotification Interval ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Hour Ġ= Ġit . start Hour , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Hour Ġ= Ġit . end Hour ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġstate . loaded Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis First Setup (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġstate . loaded Ġ&& Ġstate . name . isNull Or Blank () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġchange Theme ( theme : ĠTheme ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstate . theme Ġ= Ġtheme ĊĊĠĠĠĠĠĠĠ Ġuser DataService . store UserData ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtheme Ġ= Ġstate . theme . ordinal , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġtoggle Notifications ( value : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġuser DataService . store UserData ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotifications Enabled Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġstate . notifications Enabled Ġ= Ġvalue ĊĊĠĠĠĠĠĠĠ Ġreturn Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġdelete Notification ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstate . notifications . remove At ( index ) ĊĊĠĠĠĠĠĠĠ Ġuser DataService . store UserData ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotifications Ġ= Ġstate . notifications ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġtoggle Notification ( index : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġenabled Ġ= Ġstate . notifications [ index ]. toggle () ĊĊĠĠĠĠĠĠĠ Ġuser DataService . store UserData ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotifications Ġ= Ġstate . notifications ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġenabled ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Experimental Animation Api ĊĠĠĠ Ġsuspend Ġfun Ġcreate Notification ( ĊĠĠĠĠĠĠĠ Ġtrigger Type : ĠNotification Trigger , ĊĠĠĠĠĠĠĠ Ġthreshold : ĠInt , ĊĠĠĠĠĠĠĠ Ġfrequency : ĠList < Week day >, ĊĠĠĠĠĠĠĠ Ġinterval : ĠNotification Interval ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnotification Ġ= ĠNotification ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrigger Type Ġ= Ġtrigger Type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthreshold Ġ= Ġthreshold , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenabled Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrequency Ġ= Ġfrequency , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterval Ġ= Ġinterval ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġstate . notifications . add ( notification ) ĊĠĠĠĠĠĠĠ Ġuser DataService . store UserData ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotifications Ġ= Ġstate . notifications ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġnav Controller . pop Back Stack ( route Ġ= ĠNotifications Screen . route , Ġinclusive Ġ= Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Experimental Animation Api ĊĠĠĠ Ġsuspend Ġfun Ġadd Widget ( widget : ĠWidget ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstate . widgets . add ( widget ) ĊĊĠĠĠĠĠĠĠ Ġuser DataService . store UserData ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidgets Ġ= Ġstate . widgets ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġnav Controller . pop Back Stack ( route Ġ= ĠSettings Screen . route , Ġinclusive Ġ= Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Experimental Animation Api ĊĠĠĠ Ġsuspend Ġfun Ġsetup ( name : ĠString , Ġage : ĠInt , Ġoccup ation : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstate . name Ġ= Ġname ĊĠĠĠĠĠĠĠ Ġstate . widgets . clear () ĊĊĠĠĠĠĠĠĠ Ġcalculate Widgets ( age , Ġoccup ation ) ĊĠĠĠĠĠĠĠ Ġstate . notifications Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġstate . notifications . clear () ĊĊĠĠĠĠĠĠĠ Ġuser DataService . store UserData ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġage Ġ= Ġage , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoccup ation Ġ= Ġoccup ation , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidgets Ġ= Ġstate . widgets , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtheme Ġ= Ġstate . theme . ordinal , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotifications Ġ= Ġstate . notifications , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotifications Enabled Ġ= Ġstate . notifications Enabled ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġnav Controller . navigate ( Dashboard Screen . route ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Widgets ( age : ĠInt , Ġoccup ation : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( Occup ation . from Value ( occup ation )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOcc up ation . WORK ER , ĠOcc up ation . ST UD ENT _ WORK ER Ġ-> Ġstate . widgets . add ( Widget . AMOUNT _ AND _ TIME ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOcc up ation . ST UD ENT Ġ-> Ġstate . widgets . add ( Widget . A VER AGE _ TABLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOcc up ation . RE TI RED Ġ-> Ġstate . widgets . add ( Widget . RE COMM ENDED _ HOUR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠUnit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }