import 'package:flutter/material.dart';

export 'route.dart';
export 'router.dart';

// Kelas abstrak untuk helper navigasi
abstract class AppNavigator {
  AppNavigator._();

  // Kunci global untuk mengakses state navigator
  static final key = GlobalKey<NavigatorState>();

  // Mendapatkan BuildContext saat ini dari navigator
  static BuildContext get currentContext => key.currentState!.context;

  // Memeriksa apakah bisa kembali ke halaman sebelumnya
  static bool get canPop => key.currentState!.canPop();

  // Kembali ke halaman pertama dalam tumpukan navigasi
  static void popUntilIsFirst() {
    return key.currentState!.popUntil(
      (route) => route.isFirst,
    );
  }

  // Pindah ke halaman baru menggunakan nama rute
  static Future? pushNamed(String route, {arguments}) {
    return key.currentState!.pushNamed(route, arguments: arguments);
  }

  // Pindah ke halaman baru dan mengganti halaman saat ini
  static Future? pushNamedReplacement(String route, {arguments}) {
    return key.currentState!.pushReplacementNamed(route, arguments: arguments);
  }

  // Pindah ke halaman baru dan menghapus semua halaman sebelumnya
  static Future? pushNamedAndClear(String route, {arguments}) {
    return key.currentState!.pushNamedAndRemoveUntil(
      route,
      (_) => false,
      arguments: arguments,
    );
  }

  // Kembali ke halaman sebelumnya jika memungkinkan
  static void pop({result}) {
    if (canPop) return key.currentState!.pop(result);
  }
}
