package com.example import android.Manifest import android.content.pm.PackageManager import android.os.Build import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.animation.Crossfade import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.Surface import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect 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.core.content.ContextCompat import androidx.lifecycle.viewmodel.compose.viewModel import com.example.ui.admin.AdminPortalScreen import com.example.ui.customer.CustomerMainScreen import com.example.ui.customer.auth.AuthContainer import com.example.ui.theme.MyApplicationTheme import com.example.viewmodel.AdminViewModel import com.example.viewmodel.AuthViewModel import com.example.viewmodel.CustomerViewModel import com.google.firebase.FirebaseApp class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) try { if (FirebaseApp.getApps(this).isEmpty()) { FirebaseApp.initializeApp(this) } } catch (e: Exception) { android.util.Log.e("MainActivity", "FirebaseApp init: ${e.message}") } enableEdgeToEdge() setContent { MyApplicationTheme { LoveZoneApp() } } } } @Composable fun LoveZoneApp() { val customerViewModel: CustomerViewModel = viewModel() val adminViewModel: AdminViewModel = viewModel() val authViewModel: AuthViewModel = viewModel() val currentUser by customerViewModel.currentUser.collectAsState() var isAdminMode by remember { mutableStateOf(false) } // Request notification permission on Android 13+ val notificationPermissionLauncher = rememberLauncherForActivityResult( contract = ActivityResultContracts.RequestPermission() ) { _ -> } LaunchedEffect(Unit) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { notificationPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS) } } Surface(modifier = Modifier.fillMaxSize()) { Crossfade( targetState = when { isAdminMode -> "ADMIN" else -> "CUSTOMER" }, label = "AppModeCrossfade" ) { mode -> when (mode) { "ADMIN" -> { AdminPortalScreen( adminViewModel = adminViewModel, onExitToCustomerApp = { isAdminMode = false } ) } "CUSTOMER" -> { val context = androidx.compose.ui.platform.LocalContext.current CustomerMainScreen( customerViewModel = customerViewModel, authViewModel = authViewModel, onOpenAdminPortal = { val phoneDigits = currentUser.phoneDigits if (phoneDigits == "7005149514") { isAdminMode = true } else { android.widget.Toast.makeText( context, "Admin Access Denied! Admin Panel sirf Owner (7005149514) ke phone par chalaaya ja sakta hai.", android.widget.Toast.LENGTH_LONG ).show() } }, onLogout = { authViewModel.startLogin() } ) } } } } }