package core.presentation.settings import androidx.compose.foundation.layout.* import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ArrowBack import androidx.compose.material.icons.filled.Save import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import ru.knot.messager.R @OptIn(ExperimentalMaterial3Api::class) @Composable fun SettingsScreen( onBack: () -> Unit, onLogout: () -> Unit = {}, viewModel: SettingsViewModel = hiltViewModel() ) { val state by viewModel.state.collectAsState() var baseUrl by remember(state.baseUrl) { mutableStateOf(state.baseUrl) } Scaffold( topBar = { TopAppBar( title = { Text(stringResource(R.string.settings)) }, navigationIcon = { IconButton(onClick = onBack) { Icon(Icons.Default.ArrowBack, contentDescription = stringResource(R.string.back)) } }, actions = { IconButton(onClick = { viewModel.saveBaseUrl(baseUrl) }) { Icon(Icons.Default.Save, contentDescription = stringResource(R.string.save)) } } ) } ) { paddingValues -> Column( modifier = Modifier .fillMaxSize() .padding(paddingValues) .padding(16.dp) ) { Text( text = stringResource(R.string.server_connection), style = MaterialTheme.typography.titleMedium, modifier = Modifier.padding(bottom = 8.dp) ) OutlinedTextField( value = baseUrl, onValueChange = { baseUrl = it }, label = { Text(stringResource(R.string.api_base_url)) }, modifier = Modifier.fillMaxWidth(), placeholder = { Text("https://example.com/api/") } ) Spacer(modifier = Modifier.height(24.dp)) Text( text = stringResource(R.string.server_features), style = MaterialTheme.typography.titleMedium, modifier = Modifier.padding(bottom = 8.dp) ) FeatureStatusItem(stringResource(R.string.stories), state.config.features.stories) FeatureStatusItem(stringResource(R.string.polls), state.config.features.polls) FeatureStatusItem(stringResource(R.string.calls), state.config.features.calls) FeatureStatusItem(stringResource(R.string.groups), state.config.features.groups) Spacer(modifier = Modifier.height(16.dp)) Text( text = stringResource(R.string.limits), style = MaterialTheme.typography.titleSmall, color = MaterialTheme.colorScheme.onSurfaceVariant ) Text("${stringResource(R.string.max_file_size)}: ${state.config.limits.maxFileSize / (1024 * 1024)} MB") Text("${stringResource(R.string.max_group_members)}: ${state.config.limits.maxGroupMembers}") } } } @Composable fun FeatureStatusItem(name: String, enabled: Boolean) { Row( modifier = Modifier .fillMaxWidth() .padding(vertical = 4.dp), horizontalArrangement = Arrangement.SpaceBetween ) { Text(name) Text( text = if (enabled) stringResource(R.string.enabled) else stringResource(R.string.disabled), color = if (enabled) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.error ) } }