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.Post import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch import javax.inject.Inject @HiltViewModel class PostViewModel @Inject constructor( private val apiService: ApiService ) : ViewModel() { private val _posts = mutableStateOf>(emptyList()) val posts: State> = _posts private val _isLoading = mutableStateOf(false) val isLoading: State = _isLoading private val _errorMessage = mutableStateOf(null) val errorMessage: State = _errorMessage private var currentPage = 1 fun loadPosts(page: Int = 1) { viewModelScope.launch { _isLoading.value = true _errorMessage.value = null try { val response = apiService.getPosts(page = page) if (response.isSuccessful && response.body() != null) { val paginatedData = response.body()!! _posts.value = if (page == 1) { paginatedData.data } else { _posts.value + paginatedData.data } currentPage = page } else { _errorMessage.value = response.message() ?: "Failed to load posts" } } catch (e: Exception) { _errorMessage.value = e.message ?: "Network error" } finally { _isLoading.value = false } } } fun likePost(postId: Int) { viewModelScope.launch { try { val response = apiService.likePost(postId) if (response.isSuccessful) { // Update local state _posts.value = _posts.value.map { post -> if (post.id == postId) { post.copy( isLiked = true, likesCount = post.likesCount + 1 ) } else { post } } } } catch (e: Exception) { _errorMessage.value = e.message ?: "Failed to like post" } } } fun unlikePost(postId: Int) { viewModelScope.launch { try { val response = apiService.unlikePost(postId) if (response.isSuccessful) { // Update local state _posts.value = _posts.value.map { post -> if (post.id == postId) { post.copy( isLiked = false, likesCount = maxOf(0, post.likesCount - 1) ) } else { post } } } } catch (e: Exception) { _errorMessage.value = e.message ?: "Failed to unlike post" } } } fun loadMorePosts() { loadPosts(page = currentPage + 1) } fun clearError() { _errorMessage.value = null } }