package auth.presentation import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import auth.domain.repository.AuthRepository import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import javax.inject.Inject data class AuthState( val isLoading: Boolean = false, val error: String? = null, val isAuthenticated: Boolean = false ) @HiltViewModel class AuthViewModel @Inject constructor( private val repository: AuthRepository ) : ViewModel() { private val _state = MutableStateFlow(AuthState()) val state: StateFlow = _state.asStateFlow() fun login(userName: String, password: String) { viewModelScope.launch { _state.update { it.copy(isLoading = true, error = null) } repository.login(userName, password) .onSuccess { _state.update { it.copy(isLoading = false, isAuthenticated = true) } } .onFailure { e -> _state.update { it.copy(isLoading = false, error = e.message) } } } } fun register(userName: String, password: String) { viewModelScope.launch { _state.update { it.copy(isLoading = true, error = null) } repository.register(userName, password) .onSuccess { _state.update { it.copy(isLoading = false, isAuthenticated = true) } } .onFailure { e -> _state.update { it.copy(isLoading = false, error = e.message) } } } } }