import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../routes/app_routes.dart'; /// Service untuk menangani navigasi dalam aplikasi /// Memisahkan logika navigasi dari controller class NavigationService extends GetxService { static NavigationService get to => Get.find(); // Track the current navbar index for warga pages final currentNavIndex = 0.obs; /// Inisialisasi service Future init() async { debugPrint('🧭 NavigationService initialized'); return this; } /// Set current navbar index void setNavIndex(int index) { currentNavIndex.value = index; } /// Navigasi ke halaman Sewa Aset void toSewaAset() { debugPrint('🧭 Navigating to SewaAset'); setNavIndex(0); // Set appropriate index Get.toNamed(Routes.SEWA_ASET, preventDuplicates: false); } /// Navigasi ke halaman Order Sewa Aset dengan ID Future toOrderSewaAset( String asetId, { bool isAset = false, bool isPaket = false, }) async { debugPrint( '🧭 Navigating to OrderSewaAset with ID: $asetId, isAset: $isAset, isPaket: $isPaket', ); if (asetId.isEmpty) { Get.snackbar( 'Error', 'ID aset tidak valid', snackPosition: SnackPosition.TOP, backgroundColor: Colors.red, colorText: Colors.white, ); return; } // Navigasi dengan arguments Get.toNamed( Routes.ORDER_SEWA_ASET, arguments: {'asetId': asetId, 'isAset': isAset, 'isPaket': isPaket}, preventDuplicates: false, ); } /// Navigasi ke halaman Pembayaran Sewa dengan ID sewa Future navigateToPembayaranSewa(String sewaId) async { debugPrint('🧭 Navigating to PembayaranSewa with ID: $sewaId'); if (sewaId.isEmpty) { Get.snackbar( 'Error', 'ID sewa tidak valid', snackPosition: SnackPosition.TOP, backgroundColor: Colors.red, colorText: Colors.white, ); return; } // Navigasi dengan arguments Get.offAndToNamed(Routes.PEMBAYARAN_SEWA, arguments: {'sewaId': sewaId}); } /// Kembali ke halaman Sewa Aset void navigateToSewaAset() { debugPrint('🧭 Navigating back to SewaAset'); Get.offAllNamed(Routes.SEWA_ASET); } /// Navigasi ke halaman Order Sewa Paket dengan ID Future toOrderSewaPaket(String paketId) async { debugPrint('🧭 Navigating to OrderSewaPaket with ID: $paketId'); if (paketId.isEmpty) { Get.snackbar( 'Error', 'ID paket tidak valid', snackPosition: SnackPosition.TOP, backgroundColor: Colors.red, colorText: Colors.white, ); return; } // Navigasi dengan arguments Get.toNamed( Routes.ORDER_SEWA_PAKET, arguments: {'paketId': paketId}, preventDuplicates: false, ); } /// Navigasi kembali dari OrderSewaAset ke SewaAset void backFromOrderSewaAset() { debugPrint('🧭 Navigating back from OrderSewaAset to SewaAset'); Get.back(); } /// Navigasi kembali dari SewaAset ke dashboard warga void backFromSewaAset() { debugPrint('🧭 Navigating back from SewaAset to WargaDashboard'); setNavIndex(0); // Home tab Get.offNamed(Routes.WARGA_DASHBOARD); } /// Navigasi ke Warga Sewa (tab sewa) void toWargaSewa() { debugPrint('🧭 Navigating to WargaSewa'); setNavIndex(1); // Sewa tab Get.offNamed(Routes.WARGA_SEWA); } /// Navigasi ke Warga Langganan (tab langganan) void toWargaLangganan() { debugPrint('🧭 Navigating to WargaLangganan'); setNavIndex(2); // Langganan tab Get.offNamed(Routes.LANGGANAN); } /// Navigasi ke Profile (tab profil) void toProfile() { debugPrint('🧭 Navigating to Profile'); setNavIndex(2); // Profile tab Get.offAllNamed(Routes.PROFILE); } /// Navigasi ke dashboard sesuai role void toDashboard(String role) { debugPrint('🧭 Navigating to dashboard for role: $role'); switch (role.toLowerCase()) { case 'warga': setNavIndex(0); // Reset to home tab Get.offAllNamed(Routes.WARGA_DASHBOARD); break; case 'petugas_bumdes': Get.offAllNamed(Routes.PETUGAS_BUMDES_DASHBOARD); break; default: Get.offAllNamed(Routes.LOGIN); } } /// Navigasi ke login void toLogin() { debugPrint('🧭 Navigating to login'); Get.offAllNamed(Routes.LOGIN); } /// Navigasi mundur satu langkah void back() { debugPrint('🧭 Going back'); Get.back(); } }