package com.socialapp.presentation.viewmodel import androidx.compose.runtime.mutableStateOf import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.socialapp.domain.model.AppConfig import com.socialapp.domain.usecase.GetAppConfigUseCase import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch import javax.inject.Inject sealed class AppConfigState { object Loading : AppConfigState() data class Success(val config: AppConfig) : AppConfigState() data class Error(val message: String) : AppConfigState() } @HiltViewModel class AppConfigViewModel @Inject constructor( private val getAppConfigUseCase: GetAppConfigUseCase ) : ViewModel() { val appConfig = mutableStateOf(null) val appConfigState = mutableStateOf(AppConfigState.Loading) val isLoading = mutableStateOf(false) val errorMessage = mutableStateOf(null) init { fetchAppConfig() } fun fetchAppConfig() { viewModelScope.launch { isLoading.value = true appConfigState.value = AppConfigState.Loading val result = getAppConfigUseCase() result.onSuccess { config -> appConfig.value = config appConfigState.value = AppConfigState.Success(config) isLoading.value = false }.onFailure { error -> errorMessage.value = error.message appConfigState.value = AppConfigState.Error(error.message ?: "Unknown error") isLoading.value = false } } } fun isFeatureEnabled(featureName: String): Boolean { return appConfig.value?.features?.contains(featureName) ?: false } fun getThemeColor(colorType: String): String { return when (colorType) { "primary" -> appConfig.value?.primary_color ?: "#FF3377" "secondary" -> appConfig.value?.secondary_color ?: "#1877F2" "accent" -> appConfig.value?.accent_color ?: "#FF3377" "text" -> appConfig.value?.text_color ?: "#000000" "background" -> appConfig.value?.bg_color ?: "#FFFFFF" else -> "#FFFFFF" } } fun getAppName(): String { return appConfig.value?.app_name ?: "Hopenity" } fun getAppVersion(): String { return appConfig.value?.app_version ?: "1.0.0" } fun getMaxPostSize(): Int { return appConfig.value?.max_post_size ?: 100 } fun getMaxVideoDuration(): Int { return appConfig.value?.max_video_duration ?: 600 } fun isEmailVerificationRequired(): Boolean { return appConfig.value?.require_email_verification ?: false } fun isPhoneVerificationRequired(): Boolean { return appConfig.value?.require_phone_verification ?: false } }