package com.example.casera.viewmodel import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.example.casera.models.NotificationPreference import com.example.casera.models.UpdateNotificationPreferencesRequest import com.example.casera.network.ApiResult import com.example.casera.network.APILayer import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.launch class NotificationPreferencesViewModel : ViewModel() { private val _preferencesState = MutableStateFlow>(ApiResult.Idle) val preferencesState: StateFlow> = _preferencesState private val _updateState = MutableStateFlow>(ApiResult.Idle) val updateState: StateFlow> = _updateState fun loadPreferences() { viewModelScope.launch { _preferencesState.value = ApiResult.Loading val result = APILayer.getNotificationPreferences() _preferencesState.value = when (result) { is ApiResult.Success -> ApiResult.Success(result.data) is ApiResult.Error -> result else -> ApiResult.Error("Unknown error") } } } fun updatePreference( taskDueSoon: Boolean? = null, taskOverdue: Boolean? = null, taskCompleted: Boolean? = null, taskAssigned: Boolean? = null, residenceShared: Boolean? = null, warrantyExpiring: Boolean? = null ) { viewModelScope.launch { _updateState.value = ApiResult.Loading val request = UpdateNotificationPreferencesRequest( taskDueSoon = taskDueSoon, taskOverdue = taskOverdue, taskCompleted = taskCompleted, taskAssigned = taskAssigned, residenceShared = residenceShared, warrantyExpiring = warrantyExpiring ) val result = APILayer.updateNotificationPreferences(request) _updateState.value = when (result) { is ApiResult.Success -> { // Update the preferences state with the new values _preferencesState.value = ApiResult.Success(result.data) ApiResult.Success(result.data) } is ApiResult.Error -> result else -> ApiResult.Error("Unknown error") } } } fun resetUpdateState() { _updateState.value = ApiResult.Idle } }