package mx.trackermap.TrackerMap.android.session import android.util.Log import androidx.lifecycle.MutableLiveData import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.zhuinden.eventemitter.EventEmitter import com.zhuinden.eventemitter.EventSource import kotlinx.coroutines.launch import mx.trackermap.TrackerMap.client.apis.SessionApi class LoginViewModel( private val sessionApi: SessionApi, savedStateHandle: SavedStateHandle ) : ViewModel() { sealed class LoginResult { object Loading: LoginResult() object EmailMissing : LoginResult() object PasswordMissing : LoginResult() object Failure : LoginResult() object Success : LoginResult() } val email: MutableLiveData = savedStateHandle.getLiveData("user", "") val password: MutableLiveData = savedStateHandle.getLiveData("password", "") private val loginResultEmitter = EventEmitter() val loginResult: EventSource = loginResultEmitter fun restoreSession() { viewModelScope.launch { try { val user = sessionApi.sessionGet() Log.d("LoginViewModel", user.toString()) loginResultEmitter.emit(LoginResult.Success) } catch (e: Exception) { Log.d("LoginViewModel", "No session") } } } fun login() { val email = email.value!!.toString().trim() val password = password.value!!.toString().trim() if (email.isEmpty()) { loginResultEmitter.emit(LoginResult.EmailMissing) return } if (password.isEmpty()) { loginResultEmitter.emit(LoginResult.PasswordMissing) return } loginResultEmitter.emit(LoginResult.Loading) viewModelScope.launch { try { val user = sessionApi.sessionPost(email, password) Log.d("LoginViewModel", user.toString()) loginResultEmitter.emit(LoginResult.Success) } catch (e: Exception) { loginResultEmitter.emit(LoginResult.Failure) } } } }