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<NavigationService>();

  // Track the current navbar index for warga pages
  final currentNavIndex = 0.obs;

  /// Inisialisasi service
  Future<NavigationService> 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<void> 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<void> 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<void> 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();
  }
}
