package com.servdiary.mobile import android.Manifest import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import com.servdiary.mobile.data.ApiFactory import com.servdiary.mobile.data.AppointmentDto import com.servdiary.mobile.data.JobDto import com.servdiary.mobile.data.LocationHelper import com.servdiary.mobile.data.TokenStore import com.servdiary.mobile.ui.AppointmentDetailScreen import com.servdiary.mobile.ui.BookSlotsScreen import com.servdiary.mobile.ui.CustomerHomeScreen import com.servdiary.mobile.ui.LoginScreen import com.servdiary.mobile.ui.StaffHomeScreen import kotlinx.coroutines.launch class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val tokenStore = TokenStore(applicationContext) val api = ApiFactory.create(tokenStore) val locationHelper = LocationHelper(applicationContext) registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { }.launch( arrayOf( Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION, ) ) setContent { MaterialTheme { Surface { var role by remember { mutableStateOf(tokenStore.teamRole) } var token by remember { mutableStateOf(tokenStore.token) } var selectedAppointment by remember { mutableStateOf(null) } var selectedJob by remember { mutableStateOf(null) } val scope = rememberCoroutineScope() when { token.isNullOrBlank() -> LoginScreen(api, tokenStore) { newRole -> token = tokenStore.token role = newRole } selectedAppointment != null -> AppointmentDetailScreen( appointment = selectedAppointment!!, api = api, locationHelper = locationHelper, onBack = { selectedAppointment = null }, onChanged = { selectedAppointment = it }, ) selectedJob != null -> BookSlotsScreen( job = selectedJob!!, api = api, onBack = { selectedJob = null }, ) role == "customer" -> CustomerHomeScreen( api = api, onOpenJob = { selectedJob = it }, onLogout = { scope.launch { runCatching { api.logout() } tokenStore.clear() token = null role = null } }, ) else -> StaffHomeScreen( api = api, onOpen = { selectedAppointment = it }, onLogout = { scope.launch { runCatching { api.logout() } tokenStore.clear() token = null role = null } }, ) } } } } } }