import 'package:e_porter/domain/bindings/auth_binding.dart';
import 'package:e_porter/domain/bindings/history_binding.dart';
import 'package:e_porter/domain/bindings/navigation_binding.dart';
import 'package:e_porter/domain/bindings/porter_queue_binding.dart';
import 'package:e_porter/domain/bindings/porter_service_binding.dart';
import 'package:e_porter/domain/bindings/profil_binding.dart';
import 'package:e_porter/domain/bindings/search_flight_binding.dart';
import 'package:e_porter/domain/bindings/statistic_binding.dart';
import 'package:e_porter/domain/bindings/ticket_binding.dart';
import 'package:e_porter/domain/bindings/transaction_binding.dart';
import 'package:e_porter/domain/bindings/transaction_porter_binding.dart';
import 'package:e_porter/presentation/screens/auth/pages/forget_password_screen.dart';
import 'package:e_porter/presentation/screens/auth/pages/login_screen.dart';
import 'package:e_porter/presentation/screens/auth/pages/register_screen.dart';
import 'package:e_porter/presentation/screens/auth/pages/state_succes_screen.dart';
import 'package:e_porter/presentation/screens/auth/pages/verifikasi_screen.dart';
import 'package:e_porter/presentation/screens/boarding_pass/pages/boarding_pass_screen.dart';
import 'package:e_porter/presentation/screens/boarding_pass/pages/detail_history_porter_screen.dart';
import 'package:e_porter/presentation/screens/boarding_pass/pages/detail_ticket_screen.dart';
import 'package:e_porter/presentation/screens/boarding_pass/pages/history_porter_screen.dart';
import 'package:e_porter/presentation/screens/boarding_pass/pages/print_boarding_pass_screen.dart';
import 'package:e_porter/presentation/screens/boarding_pass/pages/search_porter_screen.dart';
import 'package:e_porter/presentation/screens/boarding_pass/pages/scan_qr_screen.dart';
import 'package:e_porter/presentation/screens/boarding_pass/pages/transaction_history.dart';
import 'package:e_porter/presentation/screens/home/pages/booking_tickets_screen.dart';
import 'package:e_porter/presentation/screens/home/pages/choose_seat_screen.dart';
import 'package:e_porter/presentation/screens/home/pages/our_service_screen.dart';
import 'package:e_porter/presentation/screens/home/pages/payment_screen.dart';
import 'package:e_porter/presentation/screens/home/pages/search_flight_screen.dart';
import 'package:e_porter/presentation/screens/home/pages/search_tickets_screen.dart';
import 'package:e_porter/presentation/screens/home/pages/ticket_booking_step1_screen.dart';
import 'package:e_porter/presentation/screens/home/pages/ticket_booking_step2_screen.dart';
import 'package:e_porter/presentation/screens/home/pages/ticket_booking_step3_screen.dart';
import 'package:e_porter/presentation/screens/home/pages/ticket_booking_step4_screen.dart';
import 'package:e_porter/presentation/screens/home/pages/upload_file_screen.dart';
import 'package:e_porter/presentation/screens/navigation/main_navigation.dart';
import 'package:e_porter/presentation/screens/onboarding/onboarding_screen.dart';
import 'package:e_porter/presentation/screens/profile/pages/change/change_no_id.dart';
import 'package:e_porter/presentation/screens/profile/pages/change_email_screen.dart';
import 'package:e_porter/presentation/screens/profile/pages/change_number_screen.dart';
import 'package:e_porter/presentation/screens/profile/pages/change_password_screen.dart';
import 'package:e_porter/presentation/screens/profile/pages/information_users_screen.dart';
import 'package:e_porter/presentation/screens/profile/pages/passenger_list_screen.dart';
import 'package:e_porter/presentation/screens/profile/pages/profile_screen.dart';
import 'package:e_porter/presentation/screens/profile/pages/add_passenger_screen.dart';
import 'package:e_porter/presentation/screens/splash/splash_screen.dart';
import 'package:get/get.dart';

class AppRoutes {
  static const INITIAL = Routes.SPLASH;

  static final routes = [
    GetPage(
      name: Routes.NAVBAR,
      page: () => MainNavigation(),
      bindings: [
        MainNavigationBinding(),
        HistoryBinding(),
        PorterQueueBinding(),
        TransactionPorterBinding(),
        StatisticBinding()
      ],
    ),
    GetPage(
      name: Routes.SPLASH,
      page: () => SplashScreen(),
      binding: AuthBinding(),
    ),
    GetPage(
      name: Routes.ONBOARDING,
      page: () => OnboardingScreen(),
    ),
    GetPage(
      name: Routes.LOGIN,
      page: () => LoginScreen(),
      binding: AuthBinding(),
    ),
    GetPage(
      name: Routes.VERIFICATION,
      page: () => VerifikasiScreen(),
    ),
    GetPage(
      name: Routes.HOME,
      page: () => MainNavigation(),
    ),
    GetPage(
      name: Routes.BOARDINGPASS,
      page: () => BoardingPassScreen(),
      binding: HistoryBinding(),
    ),
    GetPage(
      name: Routes.PROFILE,
      page: () => ProfileScreen(),
    ),
    GetPage(
      name: Routes.REGISTER,
      page: () => RegisterScreen(),
    ),
    GetPage(
      name: Routes.FORGETPASSWORD,
      page: () => ForgetPasswordScreen(),
    ),
    GetPage(
      name: Routes.STATESUCCES,
      page: () => StateSuccesScreen(),
    ),
    GetPage(
      name: Routes.OURSERVICE,
      page: () => OurServiceScreen(),
    ),
    GetPage(
      name: Routes.BOOKINGTICKETS,
      page: () => BookingTickets(),
    ),
    GetPage(
      name: Routes.SEARCHFLIGHT,
      page: () => SearchFlightScreen(),
      binding: SearchFlightBinding(),
    ),
    GetPage(
      name: Routes.SEARCHTICKETS,
      page: () => SearchTicketsScreen(),
      binding: TicketBinding(),
    ),
    GetPage(
      name: Routes.TICKETBOOKINGSTEP1,
      page: () => TicketBookingStep1Screen(),
      binding: ProfilBinding(),
    ),
    GetPage(
      name: Routes.TICKETBOOKINGSTEP2,
      page: () => TicketBookingStep2Screen(),
    ),
    GetPage(
      name: Routes.TICKETBOOKINGSTEP3,
      page: () => TicketBookingStep3Screen(),
      binding: PorterServiceBinding(),
    ),
    GetPage(
      name: Routes.TICKETBOOKINGSTEP4,
      page: () => TicketBookingStep4Screen(),
      bindings: [
        TransactionBinding(),
        SearchFlightBinding(),
      ],
    ),
    GetPage(
      name: Routes.CHOOSECHAIR,
      page: () => ChooseSeatScreen(),
    ),
    GetPage(
      name: Routes.PAYMENT,
      page: () => PaymentScreen(),
    ),
    GetPage(
      name: Routes.UPLOADFILE,
      page: () => UploadFileScreen(),
      binding: TransactionBinding(),
    ),
    GetPage(
      name: Routes.TRANSACTIONHISTORY,
      page: () => transactionHistory(),
      binding: HistoryBinding(),
    ),
    GetPage(
      name: Routes.DETAILTICKET,
      page: () => DetailTicketScreen(),
      binding: HistoryBinding(),
    ),
    GetPage(
      name: Routes.PRINTBOARDINGPASS,
      page: () => PrintBoardingPassScreen(),
    ),
    GetPage(
      name: Routes.SCANQR,
      page: () => ScanQRScreen(),
      bindings: [
        PorterQueueBinding(),
        TransactionBinding(),
      ],
    ),
    GetPage(
      name: Routes.PROCESSING,
      page: () => ProcessingPorterScreen(),
      binding: TransactionPorterBinding(),
    ),
    GetPage(
      name: Routes.HISTORYPORTER,
      page: () => HistoryPorterScreen(),
    ),
    GetPage(
      name: Routes.DETAILHISTORYPORTER,
      page: () => DetailHistoryPorterScreen(),
      bindings: [
        TransactionPorterBinding(),
        TransactionBinding(),
        HistoryBinding(),
      ],
    ),
    GetPage(
      name: Routes.ADDPASSENGER,
      page: () => AddPassengerScreen(),
      binding: ProfilBinding(),
    ),
    GetPage(
      name: Routes.INFORMATIONS,
      page: () => InformationUsersScreen(),
      binding: ProfilBinding(),
    ),
    GetPage(
      name: Routes.CHANGEPASSWORD,
      page: () => ChangePasswordScreen(),
      binding: ProfilBinding(),
    ),
    GetPage(
      name: Routes.CHANGENUMBER,
      page: () => ChangeNumberScreen(),
    ),
    GetPage(
      name: Routes.CHANGENOID,
      page: () => ChangeNoId(),
    ),
    GetPage(
      name: Routes.CHANGEEMAIL,
      page: () => ChangeEmailScreen(),
      binding: ProfilBinding(),
    ),
    GetPage(
      name: Routes.PASSENGERLIST,
      page: () => PassengerListScreen(),
      binding: ProfilBinding(),
    ),
  ];
}

class Routes {
  // Auth
  static const SPLASH = '/splash';
  static const ONBOARDING = '/onboarding';
  static const LOGIN = '/login';
  static const REGISTER = '/register';
  static const FORGETPASSWORD = '/forget_password';
  static const VERIFICATION = '/verification';
  static const STATESUCCES = '/state_succes';

  // Navbar
  static const NAVBAR = '/navigation';

  // Home
  static const HOME = '/home';
  static const OURSERVICE = '/our_service';
  static const BOOKINGTICKETS = '/booking_tickets';
  static const SEARCHFLIGHT = '/search_flight';
  static const SEARCHTICKETS = '/search_tickets';
  static const TICKETBOOKINGSTEP1 = '/ticket_booking_step1';
  static const TICKETBOOKINGSTEP2 = '/ticket_booking_step2';
  static const TICKETBOOKINGSTEP3 = '/ticket_booking_step3';
  static const TICKETBOOKINGSTEP4 = '/ticket_booking_step4';
  static const CHOOSECHAIR = '/choose_chair';
  static const PAYMENT = '/payment';
  static const UPLOADFILE = '/upload_file';

  // Boarding Pass
  static const BOARDINGPASS = '/boarding_pass';
  static const TRANSACTIONHISTORY = '/transaction_history';
  static const DETAILTICKET = '/detail_ticket';
  static const PRINTBOARDINGPASS = '/print_boarding_pass';
  static const SCANQR = '/scan_qr';
  static const PROCESSING = '/processing';
  static const HISTORYPORTER = '/history_porter';
  static const DETAILHISTORYPORTER = '/detail_history_porter';

  // Profile
  static const PROFILE = '/profile';
  static const ADDPASSENGER = '/add_passenger';
  static const INFORMATIONS = '/informations';
  static const CHANGEPASSWORD = '/change_password';
  static const CHANGENUMBER = '/change_number';
  static const CHANGENOID = '/change_no_id';
  static const CHANGEEMAIL = '/change_email';
  static const PASSENGERLIST = '/passenger_list';
}
