import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart';
import 'package:diplomaticquarterapp/widgets/progress_indicator/app_loader_widget.dart';
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';

import '../progress_indicator/app_loader_widget.dart';
import 'arrow_back.dart';
import 'network_base_view.dart';

class AppScaffold extends StatelessWidget {
  final String appBarTitle;
  final Widget body;
  final Widget bottomSheet;
  final bool isLoading;
  final bool isShowAppBar;
  final bool hasAppBarParam;
  final BaseViewModel baseViewModel;

  AppScaffold(
      {@required this.body,
      this.appBarTitle = '',
      this.isLoading = false,
      this.isShowAppBar = false,
      this.hasAppBarParam,
      this.bottomSheet,
      this.baseViewModel});

  @override
  Widget build(BuildContext context) {
    AppGlobal.context = context;
    return Scaffold(
      backgroundColor: Theme.of(context).scaffoldBackgroundColor,
      appBar: isShowAppBar
          ? AppBar(
              elevation: 0,
              backgroundColor: Theme.of(context).appBarTheme.color,
              textTheme: TextTheme(
                headline6:
                    TextStyle(color: Colors.white, fontWeight: FontWeight.bold),
              ),
              title: Text(appBarTitle.toUpperCase()),
              leading: Builder(
                builder: (BuildContext context) {
                  return ArrowBack();
                },
              ),
              centerTitle: true,
              actions: <Widget>[
                IconButton(
                  icon: Icon(FontAwesomeIcons.home),
                  color: Colors.white,
                  onPressed: () {
                    // TODO add navigator to home page
                  },
                ),
              ],
            )
          : null,
      body: baseViewModel != null
          ? NetworkBaseView(
              child: buildBodyWidget(),
              baseViewModel: baseViewModel,
            )
          : buildBodyWidget(),
      bottomSheet: bottomSheet,
    );
  }

  buildAppLoaderWidget(bool isLoading) {
    return isLoading ? AppLoaderWidget() : Container();
  }

  buildBodyWidget() {
    return Stack(children: <Widget>[body, buildAppLoaderWidget(isLoading)]);
  }
}
