package com.socialapp.presentation.viewmodel import androidx.compose.runtime.State import androidx.compose.runtime.mutableStateOf import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.socialapp.data.api.ApiService import com.socialapp.data.api.UserProfile import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch import javax.inject.Inject @HiltViewModel class UserViewModel @Inject constructor( private val apiService: ApiService ) : ViewModel() { private val _userProfile = mutableStateOf(null) val userProfile: State = _userProfile private val _isLoading = mutableStateOf(false) val isLoading: State = _isLoading private val _errorMessage = mutableStateOf(null) val errorMessage: State = _errorMessage private val _isFollowing = mutableStateOf(false) val isFollowing: State = _isFollowing fun loadUserProfile(userId: Int) { viewModelScope.launch { _isLoading.value = true _errorMessage.value = null try { val response = apiService.getUserProfile(userId) if (response.isSuccessful && response.body() != null) { _userProfile.value = response.body() } else { _errorMessage.value = response.message() ?: "Failed to load user" } } catch (e: Exception) { _errorMessage.value = e.message ?: "Network error" } finally { _isLoading.value = false } } } fun loadCurrentUser() { viewModelScope.launch { _isLoading.value = true _errorMessage.value = null try { val response = apiService.getCurrentUser() if (response.isSuccessful && response.body() != null) { _userProfile.value = response.body() } else { _errorMessage.value = response.message() ?: "Failed to load user" } } catch (e: Exception) { _errorMessage.value = e.message ?: "Network error" } finally { _isLoading.value = false } } } fun followUser(userId: Int) { viewModelScope.launch { try { val response = apiService.followUser(userId) if (response.isSuccessful && response.body() != null) { val followResponse = response.body()!! _isFollowing.value = followResponse.following _userProfile.value = _userProfile.value?.copy( followersCount = _userProfile.value!!.followersCount + 1 ) } } catch (e: Exception) { _errorMessage.value = e.message ?: "Failed to follow user" } } } fun unfollowUser(userId: Int) { viewModelScope.launch { try { val response = apiService.unfollowUser(userId) if (response.isSuccessful && response.body() != null) { val followResponse = response.body()!! _isFollowing.value = followResponse.following _userProfile.value = _userProfile.value?.copy( followersCount = maxOf(0, _userProfile.value!!.followersCount - 1) ) } } catch (e: Exception) { _errorMessage.value = e.message ?: "Failed to unfollow user" } } } fun clearError() { _errorMessage.value = null } }