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.JwtTokenManager import com.socialapp.data.api.LoginRequest import com.socialapp.data.api.RegisterRequest import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch import javax.inject.Inject @HiltViewModel class AuthViewModel @Inject constructor( private val apiService: ApiService ) : ViewModel() { private val _authState = mutableStateOf(AuthState.Idle) val authState: State = _authState private val _isLoading = mutableStateOf(false) val isLoading: State = _isLoading private val _errorMessage = mutableStateOf(null) val errorMessage: State = _errorMessage fun login(email: String, password: String) { viewModelScope.launch { _isLoading.value = true _errorMessage.value = null try { val response = apiService.login(LoginRequest(email, password)) if (response.isSuccessful && response.body() != null) { val authResponse = response.body()!! JwtTokenManager.saveToken(authResponse.token) _authState.value = AuthState.Success(authResponse) } else { _errorMessage.value = response.message() ?: "Login failed" _authState.value = AuthState.Error(response.message() ?: "Unknown error") } } catch (e: Exception) { _errorMessage.value = e.message ?: "Network error" _authState.value = AuthState.Error(e.message ?: "Unknown error") } finally { _isLoading.value = false } } } fun register(username: String, email: String, password: String) { viewModelScope.launch { _isLoading.value = true _errorMessage.value = null try { val response = apiService.register(RegisterRequest(username, email, password)) if (response.isSuccessful && response.body() != null) { val authResponse = response.body()!! JwtTokenManager.saveToken(authResponse.token) _authState.value = AuthState.Success(authResponse) } else { _errorMessage.value = response.message() ?: "Registration failed" _authState.value = AuthState.Error(response.message() ?: "Unknown error") } } catch (e: Exception) { _errorMessage.value = e.message ?: "Network error" _authState.value = AuthState.Error(e.message ?: "Unknown error") } finally { _isLoading.value = false } } } fun logout() { JwtTokenManager.clearToken() _authState.value = AuthState.Idle } fun clearError() { _errorMessage.value = null } } sealed class AuthState { object Idle : AuthState() data class Success(val user: com.socialapp.data.api.AuthResponse) : AuthState() data class Error(val message: String) : AuthState() }