package Ġcom . te arn sv . te arn app . ui . account . view model čĊč Ċ import Ġandroid . util . Log č Ċ import Ġandroidx . lifecycle .* č Ċ import Ġcom . te arn sv . te arn app . Tear n Application č Ċ import Ġcom . te arn sv . te arn app . data . New T utor č Ċ import Ġcom . te arn sv . te arn app . data . T utor č Ċ import Ġcom . te arn sv . te arn app . data . T utors č Ċ import Ġcom . te arn sv . te arn app . repository . Tear n Repository č Ċ import Ġkotlinx . coroutines . Dispatch ers č Ċ import Ġkotlinx . coroutines . launch č Ċ import Ġjava . util .* čĊč Ċ class ĠAccount ViewModel ( private Ġval Ġrepository : ĠT ear n Repository ) Ġ: ĠViewModel () Ġ{ čĊčĊĠ Ġval Ġid User Ġ= ĠMutable LiveData ("") čĊčĊĠ Ġ// ĠFIRST ĠFR AG MENT čĊĠ Ġvar Ġnames Ġ= ĠMutable LiveData ("") čĊĠ Ġvar Ġlast names Ġ= ĠMutable LiveData ("") čĊĠ Ġvar Ġemail Ġ= ĠMutable LiveData ("") čĊĠ Ġvar Ġlanguages Ġ= Ġmutable ListOf < String >() čĊčĊĠ Ġ// ĠSE COND ĠFR AG MENT čĊĠ Ġvar Ġdo b Ġ= ĠMutable LiveData ("") čĊĠ Ġvar Ġdescription Ġ= ĠMutable LiveData ("") čĊčĊĠ Ġ// ĠA VA IL ABILITY ĠFR AG MENT čĊĠ Ġvar Ġsubject Ġ= ĠMutable LiveData ("") čĊĠ Ġvar Ġcourse Ġ= ĠMutable LiveData ("") čĊĠ Ġvar Ġresponse Time Ġ= ĠMutable LiveData ("") čĊĠ Ġval Ġid Subject Ġ= ĠMutable LiveData < Mutable List < String >>( mutable ListOf ()) čĊĠ Ġval Ġid Course Ġ= ĠMutable LiveData < Mutable List < String >>( mutable ListOf ()) čĊĠ Ġvar Ġavailability List Ġ= Ġmutable ListOf < String >() čĊčĊĠ Ġ// ĠT UT OR ĠINFORMATION čĊĠ Ġvar Ġnames Information Ġ= ĠMutable LiveData ("") čĊĠ Ġvar Ġlast names Information Ġ= ĠMutable LiveData ("") čĊĠ Ġvar Ġdescription Information Ġ= ĠMutable LiveData ("") čĊĠ Ġvar Ġdo b Information Ġ= ĠMutable LiveData ("") čĊĠ Ġvar Ġresponse Information Ġ= ĠMutable LiveData ("") čĊĠ Ġvar Ġlanguage Information Ġ= Ġmutable ListOf < String >() čĊĠ Ġvar Ġavailability Information Ġ= Ġmutable ListOf < String >() čĊĠ Ġvar Ġfav T utors Ġ= Ġrepository . getF av T utors () čĊĠ Ġvar Ġfav T utors Response Ġ= ĠMutable LiveData < List < T utor >>() čĊčĊĠ Ġ// ĠMUT ABLE ĠLIST ĠWITH ĠID čĊĠ Ġvar Ġmap Of Subject s Ġ= ĠMutable LiveData < Mutable Map < String , ĠString >>( mutable Map Of ()) čĊĠ Ġvar Ġmap Of Courses Ġ= ĠMutable LiveData < Mutable Map < String , ĠString >>( mutable Map Of ()) čĊčĊĠ Ġ// HANDLE ĠERROR čĊĠ Ġvar Ġerror Ġ= Ġfalse čĊčĊĠ Ġval Ġfetch User Account Response Ġ= Ġid User . distinct Until Changed (). switch Map Ġ{ Ġid Ġ-> čĊĠĠĠ Ġlive Data ( Dispatch ers . IO ) Ġ{ čĊĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠ Ġemit ( repository . getOne User Account ( id )) čĊĠĠĠĠĠĠĠ Ġerror Ġ= Ġfalse čĊčĊĠĠĠĠĠ Ġ} Ġcatch Ġ( error : ĠException ) Ġ{ čĊĠĠĠĠĠĠĠ ĠLog . e (" ERROR _ USER ", Ġerror . toString ()) čĊĠĠĠĠĠĠĠ Ġthis @ Account ViewModel . error Ġ= Ġtrue čĊĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊĠ Ġ} čĊĠ Ġval Ġfetch Favorite Users Ġ= Ġid User . distinct Until Changed (). switch Map Ġ{ Ġid Ġ-> čĊĠĠĠ Ġlive Data ( Dispatch ers . IO ) Ġ{ čĊĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠ Ġemit ( repository . get Favorite User From User ( id )) čĊĠĠĠĠĠĠĠ Ġerror Ġ= Ġfalse čĊčĊĠĠĠĠĠ Ġ} Ġcatch Ġ( error : ĠException ) Ġ{ čĊĠĠĠĠĠĠĠ ĠLog . e (" ERROR _ USER ", Ġerror . toString ()) čĊĠĠĠĠĠĠĠ Ġthis @ Account ViewModel . error Ġ= Ġtrue čĊĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊĠ Ġ} čĊčĊĠ Ġfun Ġget Favorite T utors (){ čĊĠĠĠ ĠviewModel Scope . launch Ġ{ čĊĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġrepository . get Favorite User From User ( id User . value !! ) čĊĠĠĠĠĠĠĠ Ġif Ġ( response . error ) Ġthrow ĠException () čĊĠĠĠĠĠĠĠ Ġfav T utors Response . value Ġ= Ġresponse . fav T utors čĊčĊĠĠĠĠĠ Ġ} catch Ġ( error : ĠException ){ čĊĠĠĠĠĠĠĠ ĠLog . e (" ERROR _ USER ", Ġerror . toString ()) čĊĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊĠ Ġ} čĊčĊĠ Ġval Ġfetch Subject s Response Ġ= Ġid User . distinct Until Changed (). switch Map Ġ{ čĊĠĠĠ Ġlive Data ( Dispatch ers . IO ) Ġ{ čĊĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠ Ġemit ( repository . getAll Subject s ()) čĊĠĠĠĠĠĠĠ Ġerror Ġ= Ġfalse čĊĠĠĠĠĠ Ġ} Ġcatch Ġ( error : ĠException ) Ġ{ čĊĠĠĠĠĠĠĠ ĠLog . e (" ERROR _ USER ", Ġerror . toString ()) čĊĠĠĠĠĠĠĠ Ġthis @ Account ViewModel . error Ġ= Ġtrue čĊĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊĠ Ġ} čĊčĊĠ Ġval Ġfetch T utor Information Ġ= Ġid User . distinct Until Changed (). switch Map Ġ{ čĊĠĠĠ Ġlive Data ( Dispatch ers . IO ) Ġ{ čĊĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠ Ġemit ( repository . getT utor ( it )) čĊĠĠĠĠĠĠĠ Ġerror Ġ= Ġfalse čĊĠĠĠĠĠ Ġ} Ġcatch Ġ( error : ĠException ) Ġ{ čĊĠĠĠĠĠĠĠ ĠLog . e (" ERROR _ USER ", Ġerror . toString ()) čĊĠĠĠĠĠĠĠ Ġthis @ Account ViewModel . error Ġ= Ġtrue čĊĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊĠ Ġ} čĊčĊč ĊĠ Ġfun ĠsetId User ( id : ĠString ) Ġ{ čĊĠĠĠ Ġif Ġ( id . isEmpty ()) Ġ{ čĊĠĠĠĠĠ Ġid User . value Ġ= Ġ" 6 0 c 4 3 1 2 4 1 d 4 0 0 c 0 0 1 5 7 7 da 6 f " čĊĠĠĠĠĠ Ġreturn čĊĠĠĠ Ġ} čĊĠĠĠ Ġid User . value Ġ= Ġid čĊĠ Ġ} čĊčĊĠ Ġfun Ġverify Inputs Principal Fragment (): ĠBoolean Ġ{ čĊĠĠĠ Ġif Ġ( names . value . isNull OrEmpty () Ġ|| Ġlast names . value . isNull OrEmpty () Ġ|| Ġemail . value . isNull OrEmpty ()) čĊĠĠĠĠĠ Ġreturn Ġfalse čĊĠĠĠ Ġreturn Ġtrue čĊĠ Ġ} čĊčĊĠ Ġfun Ġverify Inputs Principal Fragment Two (): ĠBoolean Ġ{ čĊĠĠĠ Ġval ĠMAX _ LENGTH Ġ= Ġ 1 2 0 čĊĠĠĠ Ġval Ġdod Regex Ġ= čĊĠĠĠĠĠ ĠRegex (""" ^ (?: 3 [ 0 1 ] |[ 1 2 ][ 0 - 9 ]| 0 ?[ 1 - 9 ]) ([ \- /. ]) ( 0 ?[ 1 - 9 ]| 1 [ 0 - 2 ]) \ 1 \ d { 4 }${ '$ '} """) čĊĠĠĠ Ġif Ġ( dob . value . isNull OrEmpty () Ġ|| Ġ! dod Regex . contains Match In ( dob . value !! ) Ġ|| Ġdescription . value . isNull OrEmpty () Ġ|| Ġdescription . value !!. length Ġ> ĠMAX _ LENGTH ) čĊĠĠĠĠĠ Ġreturn Ġfalse čĊĠĠĠ Ġreturn Ġtrue čĊĠ Ġ} čĊčĊĠ Ġfun Ġverify Dropdown Inputs (): ĠBoolean Ġ{ čĊĠĠĠ Ġif Ġ( subject . value . isNull OrEmpty () Ġ|| Ġcourse . value . isNull OrEmpty () Ġ|| Ġresponse Time . value . isNull OrEmpty ()) čĊĠĠĠĠĠ Ġreturn Ġfalse čĊĠĠĠ Ġreturn Ġtrue čĊĠ Ġ} čĊčĊĠ Ġfun Ġverify Availability () Ġ= Ġavailability List . isEmpty () čĊĠ Ġfun Ġverify Languages () Ġ= Ġlanguages . isEmpty () čĊčĊĠ Ġfun ĠconvertTo T utor () Ġ{ čĊĠĠĠ ĠviewModel Scope . launch Ġ{ čĊĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġnew T utor Ġ= ĠNew T utor ( čĊĠĠĠĠĠĠĠĠĠ Ġid User . value !! , čĊĠĠĠĠĠĠĠĠĠ Ġid Course . value !!. toList (), čĊĠĠĠĠĠĠĠĠĠ Ġid Subject . value !!. toList (), čĊĠĠĠĠĠĠĠĠĠ Ġ"${ names . value } Ġ${ last names . value }", čĊĠĠĠĠĠĠĠĠĠ Ġdo b . value !! , čĊĠĠĠĠĠĠĠĠĠ Ġdescription . value !! , čĊĠĠĠĠĠĠĠĠĠ Ġresponse Time . value !! , čĊĠĠĠĠĠĠĠĠĠ Ġavailability List . map Ġ{ Ġit . toLowerCase ( Locale . ROOT ). capitalize ( Locale . ROOT ) Ġ}. toSet () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList (), čĊĠĠĠĠĠĠĠĠĠ Ġlanguages . toList (), čĊĠĠĠĠĠĠĠ Ġ) čĊčĊĠĠĠĠĠĠĠ Ġrepository . convertTo T utor ( new T utor ) čĊĠĠĠĠĠĠĠ Ġerror Ġ= Ġfalse čĊĠĠĠĠĠĠĠ ĠsetId User ( Tear n Application . prefs . getId () !! ) čĊčĊĠĠĠĠĠ Ġ} Ġcatch Ġ( error : ĠException ) Ġ{ čĊĠĠĠĠĠĠĠ ĠLog . e (" INSERT _ ERROR ", Ġerror . toString ()) čĊĠĠĠĠĠĠĠ Ġthis @ Account ViewModel . error Ġ= Ġtrue čĊĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊĠ Ġ} čĊčĊĠ Ġfun Ġupdate T utor ( t utor : ĠNew T utor ) Ġ{ čĊĠĠĠ ĠviewModel Scope . launch Ġ{ čĊĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠ Ġrepository . convertTo T utor ( t utor ) čĊĠĠĠĠĠĠĠ Ġerror Ġ= Ġfalse čĊĠĠĠĠĠĠĠ ĠsetId User ( Tear n Application . prefs . getId () !! ) čĊčĊĠĠĠĠĠ Ġ} Ġcatch Ġ( error : ĠException ) Ġ{ čĊĠĠĠĠĠĠĠ ĠLog . e (" UPDATE _ ERROR ", Ġerror . toString ()) čĊĠĠĠĠĠĠĠ Ġthis @ Account ViewModel . error Ġ= Ġtrue čĊĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊĠ Ġ} čĊčĊĠ Ġfun Ġare Valid Updated (): ĠBoolean Ġ{ čĊčĊĠĠĠ Ġif Ġ( names Information . value . isNull OrEmpty () Ġ|| čĊĠĠĠĠĠ Ġlast names Information . value . isNull OrEmpty () Ġ|| čĊĠĠĠĠĠ Ġdo b Information . value . isNull OrEmpty () Ġ|| čĊĠĠĠĠĠ Ġresponse Information . value . isNull OrEmpty () Ġ|| čĊĠĠĠĠĠ Ġdescription Information . value . isNull OrEmpty () čĊĠĠĠ Ġ) čĊĠĠĠĠĠ Ġreturn Ġfalse čĊčĊĠĠĠ Ġreturn Ġtrue čĊĠ Ġ} čĊčĊĠ Ġfun Ġclean Database (){ čĊĠĠĠ ĠviewModel Scope . launch Ġ{ čĊĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠĠ Ġrepository . delete Database () čĊĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ){ čĊĠĠĠĠĠĠ ĠLog . e (" error ", e . toString ()) čĊĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊĠ Ġ} č Ċ }