import 'package:flutter/material.dart';
import 'package:flutter_habit/common/BaseArchitectural.dart';
import 'package:flutter_habit/provider/UserProvider.dart';
import 'package:flutter_habit/view/context/ExerciseInfoContext.dart';
import 'package:flutter_habit/view/context/LifeInfoContext.dart';
import 'package:flutter_habit/view/context/BasicInfoContext.dart';
import 'package:flutter_habit/view/context/StudyInfoContext.dart';
import 'package:flutter_habit/view/drawer/HomePageDrawer.dart';
import 'package:flutter_habit/view/record/BasicInfoRecordingPage.dart';
import 'package:flutter_habit/view/record/ExerciseInfoRecordingPage.dart';
import 'package:flutter_habit/view/record/LifeInfoRecordingPage.dart';
import 'package:flutter_habit/view/record/StudyInfoRecordingPage.dart';
import 'package:provider/provider.dart';

/// Description: Home Page
/// Time       : 08/18/2023 Friday
/// Author     : liuyuqi.gov@msn.cn
class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        ChangeNotifierProvider<HomePageService>(
            create: (_) => HomePageService(context)),
        ChangeNotifierProvider<HomePageModel>(
            create: (_) => HomePageModel(context)),
      ],
      child: _HomePageView(),
    );
  }
}

// model
class HomePageModel extends BaseModel {
  HomePageModel(BuildContext context) : super(context);

  late int currentIndex;

  PageController? pageViewController;

  @override
  void init(BuildContext context) {
    super.init(context);
    currentIndex = 0;
    pageViewController = PageController(initialPage: 0);
  }
}

// service
class HomePageService extends BaseProvider {
  HomePageService(BuildContext context) : super(context);

  void changeNavigation(BuildContext context, int index) {
    HomePageModel model = Provider.of<HomePageModel>(context, listen: false);
    model.currentIndex = index;
    model.pageViewController!.animateToPage(index,
        duration: Duration(milliseconds: 300), curve: Curves.ease);
    model.refresh();
  }

  void onPageChanged(BuildContext context, int index) {
    HomePageModel model = Provider.of<HomePageModel>(context, listen: false);
    model.currentIndex = index;
    model.refresh();
  }

  Future<void> toBasicInfoRecordingPage(BuildContext context) async {
    await Navigator.of(context)
        .push(MaterialPageRoute(builder: (_) => BasicInfoRecordingPage()));
  }

  Future<void> toLifeInfoRecordingPage(BuildContext context) async {
    await Navigator.of(context)
        .push(MaterialPageRoute(builder: (_) => LifeInfoRecordingPage()));
  }

  Future<void> toExerciseInfoRecordingPage(BuildContext context) async {
    await Navigator.of(context)
        .push(MaterialPageRoute(builder: (_) => ExerciseInfoRecordingPage()));
  }

  Future<void> toStudyInfoRecordingPage(BuildContext context) async {
    await Navigator.of(context)
        .push(MaterialPageRoute(builder: (_) => StudyInfoRecordingPage()));
  }
}

// view
class _HomePageView extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    HomePageService service =
        Provider.of<HomePageService>(context, listen: false);
    HomePageModel model = Provider.of<HomePageModel>(context, listen: true);
    UserProvider userProvider =
        Provider.of<UserProvider>(context, listen: true);
    return Scaffold(
      appBar: AppBar(
        title: Text("Home"),
        actions: userProvider.token == null
            ? []
            : <Widget>[
                Row(
                  children: <Widget>[
                    Text(
                      "${userProvider.coins} x ",
                      style: TextStyle(fontSize: 16),
                    ),
                    Icon(Icons.monetization_on),
                    Text("  "),
                  ],
                ),
              ],
      ),
      drawer: HomePageDrawer(),
      body: PageView(
        controller: model.pageViewController,
        onPageChanged: (index) => service.onPageChanged(context, index),
        physics: NeverScrollableScrollPhysics(),
        children: <Widget>[
          BasicInfoContext(),
          LifeInfoContext(),
          ExerciseInfoContext(),
          StudyInfoContext(),
        ],
      ),
      floatingActionButton: <Widget>[
        FloatingActionButton(
          child: Icon(Icons.playlist_add),
          onPressed: () => service.toBasicInfoRecordingPage(context),
        ),
        FloatingActionButton(
          child: Icon(Icons.playlist_add),
          onPressed: () => service.toLifeInfoRecordingPage(context),
        ),
        FloatingActionButton(
          child: Icon(Icons.playlist_add),
          onPressed: () => service.toExerciseInfoRecordingPage(context),
        ),
        FloatingActionButton(
          child: Icon(Icons.playlist_add),
          onPressed: () => service.toStudyInfoRecordingPage(context),
        ),
      ][model.currentIndex],
      bottomNavigationBar: BottomNavigationBar(
        currentIndex: model.currentIndex,
        onTap: (index) => service.changeNavigation(context, index),
        showUnselectedLabels: true,
        fixedColor: Theme.of(context).colorScheme.secondary,
        unselectedItemColor: Theme.of(context).unselectedWidgetColor,
        items: <BottomNavigationBarItem>[
          BottomNavigationBarItem(
              icon: Icon(Icons.accessibility), label: "基本信息"),
          BottomNavigationBarItem(icon: Icon(Icons.wb_sunny), label: "日常生活"),
          BottomNavigationBarItem(
              icon: Icon(Icons.directions_bike), label: "体育锻炼"),
          BottomNavigationBarItem(icon: Icon(Icons.school), label: "课程学习"),
        ],
      ),
    );
  }
}