package com.example.scanwich import android.content.SharedPreferences import android.widget.Toast import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Edit import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.core.content.edit @Composable fun SettingsScreen(prefs: SharedPreferences, onLogout: () -> Unit, onProfileUpdated: () -> Unit) { var isEditing by remember { mutableStateOf(false) } val context = LocalContext.current // État réactif pour la connexion Strava var isStravaConnected by remember { mutableStateOf(prefs.contains("strava_token")) } // Écouteur pour mettre à jour l'état si le token change DisposableEffect(prefs) { val listener = SharedPreferences.OnSharedPreferenceChangeListener { p, key -> if (key == "strava_token") { isStravaConnected = p.contains("strava_token") } } prefs.registerOnSharedPreferenceChangeListener(listener) onDispose { prefs.unregisterOnSharedPreferenceChangeListener(listener) } } if (isEditing) { SetupScreen(prefs) { isEditing = false onProfileUpdated() } } else { val targetCals = prefs.getString("target_calories", "0") Column(modifier = Modifier.fillMaxSize().padding(16.dp).verticalScroll(rememberScrollState())) { Text("Mon Profil", style = MaterialTheme.typography.headlineMedium) Spacer(Modifier.height(16.dp)) Card(modifier = Modifier.fillMaxWidth()) { Column(modifier = Modifier.padding(16.dp)) { ProfileItem("Objectif", prefs.getString("goal", "") ?: "") ProfileItem("Cible Calorique", "$targetCals kcal") ProfileItem("Diabétique", if (prefs.getBoolean("is_diabetic", false)) "Oui" else "Non") } } Spacer(Modifier.height(8.dp)) Button(onClick = { isEditing = true }, modifier = Modifier.fillMaxWidth()) { Icon(Icons.Default.Edit, null); Text(" Modifier le profil") } Spacer(Modifier.height(32.dp)) Text("Intégrations", style = MaterialTheme.typography.titleMedium) Spacer(Modifier.height(8.dp)) if (isStravaConnected) { OutlinedButton( onClick = { prefs.edit { remove("strava_token") remove("strava_refresh_token") } // L'écouteur mettra `isStravaConnected` à jour automatiquement Toast.makeText(context, "Strava déconnecté", Toast.LENGTH_SHORT).show() }, modifier = Modifier.fillMaxWidth() ) { Text("Déconnecter Strava (Connecté)") } } else { Text("Aucune intégration active. Allez dans l'onglet 'Sport' pour connecter Strava.", style = MaterialTheme.typography.bodyMedium) } Spacer(Modifier.height(32.dp)) Button(onClick = onLogout, colors = ButtonDefaults.buttonColors(containerColor = MaterialTheme.colorScheme.error), modifier = Modifier.fillMaxWidth()) { Text("Déconnexion") } } } } @Composable fun ProfileItem(label: String, value: String) { Row(modifier = Modifier.fillMaxWidth().padding(vertical = 4.dp), horizontalArrangement = Arrangement.SpaceBetween) { Text(label, fontWeight = FontWeight.Bold); Text(value) } }