import 'package:flutter/material.dart';
import 'package:persistent_bottom_nav_bar_v2/persistent_bottom_nav_bar_v2.dart';

import '../../../api/mhsl/breaker/getBreakers/getBreakersResponse.dart';
import '../../../model/breakers/Breaker.dart';
import '../../../view/pages/files/files.dart';
import '../../../view/pages/more/roomplan/roomplan.dart';
import '../../../view/pages/talk/chatList.dart';
import '../../../view/pages/timetable/timetable.dart';
import '../../../widget/centeredLeading.dart';
import 'gradeAverages/view/grade_averages_view.dart';
import 'holidays/view/holidays_view.dart';
import 'marianumMessage/view/marianum_message_list_view.dart';

class AppModule {
  String name;
  IconData icon;
  Widget Function() create;

  AppModule(this.name, this.icon, this.create);

  static Map<Modules, AppModule> modules() => {
    Modules.timetable: AppModule('Vertretung', Icons.calendar_month, Timetable.new),
    Modules.talk: AppModule('Talk', Icons.chat, ChatList.new),
    Modules.files: AppModule('Files', Icons.folder, Files.new),
    Modules.marianumMessage: AppModule('Marianum Message', Icons.newspaper, MarianumMessageListView.new),
    Modules.roomPlan: AppModule('Raumplan', Icons.location_pin, Roomplan.new),
    Modules.gradeAveragesCalculator: AppModule('Notendurschnittsrechner', Icons.calculate, GradeAveragesView.new),
    Modules.holidays: AppModule('Schulferien', Icons.holiday_village, HolidaysView.new),
  };

  static AppModule getModule(Modules module) => modules()[module]!;

  Widget toListTile(BuildContext context) => ListTile(
    leading: CenteredLeading(Icon(icon)),
    title: Text(name),
    onTap: () => pushScreen(context, withNavBar: false, screen: create()),
    trailing: const Icon(Icons.arrow_right),
  );

  PersistentTabConfig toBottomTab(BuildContext context, {Widget Function(IconData icon)? itemBuilder}) => PersistentTabConfig(
    screen: Breaker(breaker: BreakerArea.global, child: create()),
    item: ItemConfig(
        activeForegroundColor: Theme.of(context).primaryColor,
        inactiveForegroundColor: Theme.of(context).colorScheme.secondary,
        icon: itemBuilder == null ? Icon(icon) : itemBuilder(icon),
        title: name
    ),
  );
}

enum Modules {
  timetable,
  talk,
  files,
  marianumMessage,
  roomPlan,
  gradeAveragesCalculator,
  holidays,
}