import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/core/service/client/base_app_client.dart';
import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart';
import 'package:diplomaticquarterapp/routes.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/data_display/list/flexible_container.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/text/app_texts_widget.dart';
import 'package:flutter/material.dart';

import '../../config/size_config.dart';
import 'drawer_item_widget.dart';

class AppDrawer extends StatefulWidget {
  @override
  _AppDrawerState createState() => _AppDrawerState();
}

class _AppDrawerState extends State<AppDrawer> {
  @override
  void initState() {
    super.initState();
    checkUserData();
  }

  var sharedPref = new AppSharedPreferences();
  AuthenticatedUser user;
  @override
  Widget build(BuildContext context) {
    return SizedBox(
      width: MediaQuery.of(context).size.width * 0.75,
      child: Container(
        color: Colors.white,
        child: Drawer(
          child: Column(
            children: <Widget>[
              Expanded(
                flex: 4,
                child: ListView(
                  padding: EdgeInsets.zero,
                  children: <Widget>[
                    Container(
                      height: SizeConfig.screenHeight * .30,
                      child: InkWell(
                        child: DrawerHeader(
                          child: Column(
                            children: <Widget>[
                              Container(
                                child: Image.asset('assets/images/logo.png'),
                                margin: EdgeInsets.all(
                                    SizeConfig.imageSizeMultiplier * 4),
                              ),
                              user != null
                                  ? Padding(
                                      padding: EdgeInsets.all(15),
                                      child: Column(children: <Widget>[
                                        Row(
                                          children: <Widget>[
                                            Padding(
                                                padding:
                                                    EdgeInsets.only(right: 5),
                                                child: Icon(
                                                  Icons.account_circle,
                                                  color: Colors.red,
                                                )),
                                            AppText(
                                              user.firstName +
                                                  ' ' +
                                                  user.lastName,
                                              color: Colors.red,
                                            )
                                          ],
                                        ),
                                        Row(children: <Widget>[
                                          Padding(
                                              padding: EdgeInsets.only(
                                                  left: 30, top: 5),
                                              child: Column(
                                                children: <Widget>[
                                                  AppText(
                                                    'File No:' +
                                                        user.patientID
                                                            .toString(),
                                                    color: Colors.red,
                                                    fontSize: SizeConfig
                                                            .textMultiplier *
                                                        1.5,
                                                  ),
                                                  AppText(
                                                    user.bloodGroup != null
                                                        ? 'Blood Group: ' +
                                                            user.bloodGroup
                                                        : '',
                                                    fontSize: SizeConfig
                                                            .textMultiplier *
                                                        1.5,
                                                  ),
                                                ],
                                              ))
                                        ])
                                      ]))
                                  : SizedBox(),
                            ],
                          ),
                        ),
                      ),
                    ),
                    Column(
                      mainAxisAlignment: MainAxisAlignment.center,
                      children: <Widget>[
                        InkWell(
                          child: DrawerItem(
                              TranslationBase.of(context).arabicChange,
                              Icons.translate),
                          onTap: () {
                            Navigator.of(context).pushNamed(
                              WELCOME_LOGIN,
                            );
                          },
                        ),
                        user != null
                            ? Column(
                                children: <Widget>[
                                  InkWell(
                                    child: Row(
                                      mainAxisAlignment:
                                          MainAxisAlignment.spaceBetween,
                                      children: <Widget>[
                                        DrawerItem(
                                          TranslationBase.of(context).family,
                                          Icons.group,
                                          textColor: Colors.red,
                                          iconColor: Colors.red,
                                        ),
                                        Padding(
                                            padding: EdgeInsets.only(
                                                bottom: 10, right: 30),
                                            child: Icon(
                                              Icons.chevron_right,
                                              color: Colors.red,
                                            ))
                                      ],
                                    ),
                                    onTap: () {
                                      Navigator.of(context).pushNamed(
                                        MY_FAMILIY,
                                      );
                                    },
                                  ),
                                  InkWell(
                                    child: DrawerItem(
                                        TranslationBase.of(context)
                                            .notification,
                                        Icons.notifications),
                                    onTap: () {
                                      Navigator.of(context).pushNamed(
                                        WELCOME_LOGIN,
                                      );
                                    },
                                  ),
                                  InkWell(
                                    child: DrawerItem(
                                        TranslationBase.of(context).appsetting,
                                        Icons.settings_input_composite),
                                    onTap: () {
                                      Navigator.of(context).pushNamed(
                                        WELCOME_LOGIN,
                                      );
                                    },
                                  ),
                                  InkWell(
                                    child: DrawerItem(
                                        TranslationBase.of(context).rateApp,
                                        Icons.star),
                                    onTap: () {
                                      Navigator.of(context).pushNamed(
                                        WELCOME_LOGIN,
                                      );
                                    },
                                  ),
                                  InkWell(
                                    child: DrawerItem(
                                        TranslationBase.of(context).logout,
                                        Icons.lock_open),
                                    onTap: () {
                                      logout();
                                    },
                                  )
                                ],
                              )
                            : InkWell(
                                child: DrawerItem(
                                    TranslationBase.of(context).loginregister,
                                    Icons.lock_open),
                                onTap: () {
                                  login();
                                },
                              ),
                      ],
                    )
                  ],
                ),
              ),
              Expanded(
                flex: 1,
                child: Column(
                  children: <Widget>[
                    Container(
                      // This align moves the children to the bottom
                      child: Align(
                        alignment: FractionalOffset.bottomCenter,
                        child: Container(
                          child: Column(
                            children: <Widget>[
                              Text("Powered by"),
                              Image.asset(
                                'assets/images/cs_logo_container.png',
                                width: SizeConfig.imageSizeMultiplier * 30,
                              )
                            ],
                          ),
                        ),
                      ),
                    )
                  ],
                ),
              )
            ],
          ),
        ),
      ),
    );
  }

  drawerNavigator(context, routeName) {
    Navigator.of(context).pushNamed(routeName);
  }

  checkUserData() async {
    if (await this.sharedPref.getObject(USER_PROFILE) != null) {
      var data = AuthenticatedUser.fromJson(
          await this.sharedPref.getObject(USER_PROFILE));
      setState(() {
        this.user = data;
        print(this.user);
      });
    }
  }

  logout() async {
    // this.sharedPref.remove(USER_PROFILE);
    // this.sharedPref.remove(IMEI_USER_DATA);
    // this.sharedPref.remove(TOKEN);
    // this.sharedPref.remove(LOGIN_TOKEN_ID);
    await sharedPref.clear();

    this.user = null;
    Navigator.of(context).pushNamed(HOME);
  }

  login() async {
    var data = await sharedPref.getObject(IMEI_USER_DATA);
    sharedPref.remove(REGISTER_DATA_FOR_LOGIIN);
    if (data != null) {
      Navigator.of(context).pushNamed(CONFIRM_LOGIN);
    } else {
      Navigator.of(context).pushNamed(
        WELCOME_LOGIN,
      );
    }
  }
}
