import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/viewModels/medical/weight_pressure_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/pages/medical/my_trackers/widget/TabBarWidget.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/dialogs/confirm_send_email_dialog.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'AddWeightPage.dart';
import 'WeightMonthlyPage.dart';
import 'WeightYeaPage.dart';
import 'WeightWeeklyPage.dart';

class WeightHomePage extends StatefulWidget {
  @override
  _WeightHomePageState createState() => _WeightHomePageState();
}

class _WeightHomePageState extends State<WeightHomePage> with SingleTickerProviderStateMixin {
  TabController _tabController;

  @override
  void initState() {
    super.initState();
    _tabController = TabController(length: 3, vsync: this);
  }

  @override
  void dispose() {
    super.dispose();
    _tabController.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return BaseView<WeightPressureViewModel>(
      onModelReady: (model) => model.getWeight(),
      builder: (_, model, w) => AppScaffold(
        isShowAppBar: true,
        isShowDecPage: false,
        appBarTitle: TranslationBase.of(context).weight,
        appBarIcons: [
          IconButton(
            icon: Icon(Icons.email),
            color: Colors.white,
            onPressed: () {
              showDialog(
                context: context,
                child: ConfirmSendEmailDialog(
                  email: model.user.emailAddress,
                  onTapSendEmail: () async {
                    GifLoaderDialogUtils.showMyDialog(context);
                    model.sendReportByEmail().then((value) {
                      GifLoaderDialogUtils.hideDialog(context);
                      if (model.state == ViewState.ErrorLocal) {
                        AppToast.showErrorToast(message: model.error);
                      } else {
                        AppToast.showSuccessToast(
                          message: TranslationBase.of(context).emailSentSuccessfully,
                        );
                      }
                    }).catchError((e) {
                      GifLoaderDialogUtils.hideDialog(context);
                      AppToast.showErrorToast(message: model.error);
                    });
                  },
                ),
              );
            },
          ),
        ],
        baseViewModel: model,
        body: Scaffold(
          extendBodyBehindAppBar: true,
          appBar: TabBarWidget(
            tabController: _tabController,
          ),
          body: Column(
            children: <Widget>[
              Expanded(
                child: TabBarView(
                  physics: BouncingScrollPhysics(),
                  controller: _tabController,
                  children: <Widget>[
                    WeightWeeklyPage(
                      model: model,
                    ),
                    WeightMonthlyPage(
                      model: model,
                    ),
                    WeightYearPage(
                      model: model,
                    )
                  ],
                ),
              )
            ],
          ),
          floatingActionButton: InkWell(
            onTap: () {
              Navigator.push(
                  context,
                  FadePage(
                      page: AddWeightPage(
                    model: model,
                  )));
            },
            child: Container(
              width: 55,
              height: 55,
              decoration: BoxDecoration(
                shape: BoxShape.circle,
                color: Theme.of(context).primaryColor,
              ),
              child: Center(
                child: Icon(
                  Icons.add,
                  color: Colors.white,
                ),
              ),
            ),
          ),
        ),
      ),
    );
  }
}
