package com.iiyh.emoneyinfo.ui import android.content.Context import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.CreditCard import androidx.compose.material.icons.filled.Settings import androidx.compose.material3.Icon import androidx.compose.material3.NavigationBar import androidx.compose.material3.NavigationBarItem import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import com.iiyh.emoneyinfo.R import androidx.navigation.NavDestination.Companion.hierarchy import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.rememberNavController import com.iiyh.emoneyinfo.nfc.UnifiedNfcReader import com.iiyh.emoneyinfo.ui.screens.AboutScreen import com.iiyh.emoneyinfo.ui.screens.FaqScreen import com.iiyh.emoneyinfo.ui.screens.HomeScreen import com.iiyh.emoneyinfo.ui.screens.HistoryScreen import com.iiyh.emoneyinfo.ui.screens.PrivacyPolicyScreen import com.iiyh.emoneyinfo.ui.screens.SettingsScreen import com.iiyh.emoneyinfo.ui.screens.TermsScreen private data class BottomDestination(val route: String, val label: String) @Composable fun EmoneyInfoApp( nfcReader: UnifiedNfcReader, adsEnabled: Boolean ) { val context = LocalContext.current val navController = rememberNavController() val uiState by nfcReader.uiState.collectAsState() val preferences = remember(context) { context.getSharedPreferences("emoney_info_prefs", Context.MODE_PRIVATE) } var showCardNumber by remember(preferences) { mutableStateOf(preferences.getBoolean("masked", true)) } val bottomDestinations = listOf( BottomDestination("home", stringResource(R.string.tab_home)), BottomDestination("settings", stringResource(R.string.tab_settings)) ) Scaffold( bottomBar = { val navBackStackEntry by navController.currentBackStackEntryAsState() val currentDestination = navBackStackEntry?.destination val visible = currentDestination?.route in setOf("home", "settings") if (visible) { NavigationBar { bottomDestinations.forEach { destination -> NavigationBarItem( selected = currentDestination?.hierarchy?.any { it.route == destination.route } == true, onClick = { if (destination.route == "home") { navController.popBackStack("home", false) } else { navController.navigate(destination.route) { launchSingleTop = true } } }, icon = { Icon( imageVector = if (destination.route == "home") Icons.Default.CreditCard else Icons.Default.Settings, contentDescription = destination.label ) }, label = { Text(destination.label) } ) } } } } ) { innerPadding -> NavHost(navController = navController, startDestination = "home", modifier = Modifier.padding(innerPadding)) { composable("home") { HomeScreen( state = uiState, adsEnabled = adsEnabled, showCardNumber = showCardNumber, onScanTapped = { nfcReader.startScan() }, onViewHistoryTapped = { navController.navigate("history") }, onSettingsTapped = { navController.navigate("settings") } ) } composable("settings") { SettingsScreen( adsEnabled = adsEnabled, showCardNumber = showCardNumber, onShowCardNumberChanged = { showCardNumber = it preferences.edit().putBoolean("masked", it).apply() }, onHelpCenterTapped = { navController.navigate("faq") }, onAboutTapped = { navController.navigate("about") } ) } composable("history") { HistoryScreen( state = uiState, adsEnabled = adsEnabled, onBack = { navController.popBackStack() } ) } composable("faq") { FaqScreen(onBack = { navController.popBackStack() }) } composable("about") { AboutScreen( onBack = { navController.popBackStack() }, onTermsTapped = { navController.navigate("terms") }, onPrivacyTapped = { navController.navigate("privacy") } ) } composable("terms") { TermsScreen(onBack = { navController.popBackStack() }) } composable("privacy") { PrivacyPolicyScreen(onBack = { navController.popBackStack() }) } } } }