import 'package:aitrainer_app/bloc/account/account_bloc.dart';
import 'package:aitrainer_app/localization/app_language.dart';
import 'package:aitrainer_app/model/customer.dart';
import 'package:aitrainer_app/util/trans.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:aitrainer_app/widgets/bottom_nav.dart';
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';

// ignore: must_be_immutable
class AccountPage extends StatelessWidget with Trans {
  // ignore: close_sinks
  AccountBloc accountBloc;

  @override
  Widget build(BuildContext context) {
    setContext(context);
    accountBloc = BlocProvider.of<AccountBloc>(context);
    return Scaffold(
        appBar: AppBar(
          title: Text(t('Account')),
          backgroundColor: Colors.transparent,
        ),
        body: Container(
          foregroundDecoration: BoxDecoration(
            image: DecorationImage(
              image: AssetImage('asset/image/WT_long_logo.png'),
              alignment: Alignment.topRight,
            ),
          ),
          decoration: BoxDecoration(
            image: DecorationImage(
              image: AssetImage('asset/image/WT_light_background.png'),
              fit: BoxFit.cover,
              alignment: Alignment.center,
            ),
          ),
          child: BlocConsumer<AccountBloc, AccountState>(
            listener: (context, state) {
              if (state is AccountError) {
                Scaffold.of(context).showSnackBar(SnackBar(
                  backgroundColor: Colors.orange,
                    content:
                      Text(state.message, style: TextStyle(color: Colors.white))));
                } else if (state is AccountLoading) {

                }
              },
            builder: (context, state) {
              if ( state is AccountInitial ) {
                String customerName = accountBloc.customerRepository.firstName +
                  " " + accountBloc.customerRepository.name;
                return accountWidget(context, customerName, accountBloc);
              } else if ( state is AccountLoggedIn ) {
                String customerName = accountBloc.customerRepository.firstName +
                  " " + accountBloc.customerRepository.name;
                return accountWidget(context, customerName, accountBloc);
              } else if ( state is AccountLoggedOut ) {
                String customerName = "";
                return accountWidget(context, customerName, accountBloc);
              } else if ( state is AccountReady ) {
                String customerName = accountBloc.customerRepository.firstName +
                  " " + accountBloc.customerRepository.name;
                return accountWidget(context, customerName, accountBloc);
              } else {
                return accountWidget(context, "", accountBloc);
              }

            }
          ),
        ),
        bottomNavigationBar: BottomNavigator(bottomNavIndex: 3));
  }

  ListView accountWidget(BuildContext context, String customerName, AccountBloc accountBloc) {
    return ListView(padding: EdgeInsets.only(top: 135), children: <Widget>[
      ListTile(
        leading: Icon(Icons.perm_identity),
        subtitle:
        Text(t("Profile")),
        title: FlatButton(
          child: Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
              Text(customerName,
                style: TextStyle(color: Colors.blue)),
              Icon(Icons.arrow_forward_ios),
            ]),
          textColor: Colors.grey,
          color: Colors.white,
          onPressed: () => {
            if (accountBloc.customerRepository.customer != null) {
              Navigator.of(context).pushNamed('customerModifyPage'),
              print("Profile"),
            }
          },
        ),
      ),
      loginOut( context, accountBloc ),
      getMyTrainees(context, accountBloc),
    ]);
  }

  ListTile loginOut( BuildContext context, AccountBloc accountBloc ) {
    ListTile element = ListTile();

    String text = "Logout";
    Color buttonColor = Colors.orange;

    if ( accountBloc.customerRepository.customer == null || accountBloc.customerRepository.customer.email == null) {
      text = "Login";
      buttonColor = Colors.blue;
    }

    element = ListTile(
      enabled: true,
      leading: Icon(Icons.input),
      title: FlatButton(
        child: Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
              Text(t(text),
                style: TextStyle(
                    color: buttonColor
                )),
              Icon(Icons.arrow_forward_ios),
            ]),
        textColor: buttonColor,
        color: Colors.white,
        onPressed: () => {
          if ( accountBloc.loggedIn ) {
            accountBloc.add(AccountLogout())
          } else {
            accountBloc.add(AccountLogin()),
            Navigator.of(context).pushNamed('login'),
          }
        },
      ),
    );

    return element;
  }

  Widget getMyTrainees( BuildContext context, AccountBloc accountBloc ) {
    if ( accountBloc.customerRepository.customer == null ) {
      return Container();
    }
    if ( accountBloc.customerRepository.customer.trainer == 0 ) {
      return ListTile(
        title: Container(),
      );
    }

    if (accountBloc.customerRepository.getTraineesList() == null ) {
      return ListTile(
        leading: Icon(Icons.people),
        title: RaisedButton(
          color: Colors.white70,
          onPressed: () => accountBloc.add(AccountGetTrainees()),
          child: Text("See my trainees"),
        ),
      );

    }

    List<Widget> elements = List<Widget>();
    accountBloc.customerRepository.getTraineesList().forEach((element) {
      Customer trainee = element;
      String name = trainee.name;
      String firstName = trainee.firstname;
      String nodeName = AppLanguage().appLocal == Locale("en") ?
      firstName + " " + name : name + " " + firstName;

      bool selected = accountBloc.traineeId == trainee.customerId;

      Widget widget = FlatButton(
        padding: EdgeInsets.all(10),
        shape:RoundedRectangleBorder(
          borderRadius: BorderRadius.all(Radius.circular(8)),
          side: BorderSide(width: 2, color: selected ? Colors.blue : Colors.black26 ),
        ),
        onPressed: () {
          accountBloc.add(AccountSelectTrainee(traineeId: trainee.customerId));
          //Navigator.of(context).pushNamed('login');
        },
        child:  Row(
        mainAxisAlignment: MainAxisAlignment.spaceBetween,
          children: [
            Text(nodeName, style:
              TextStyle(
                color: selected ? Colors.blue : Colors.black54,
                fontWeight: selected ? FontWeight.bold : FontWeight.normal
              ),
            ),
            Icon(Icons.arrow_forward_ios),
          ]),
      );
      elements.add(widget);
    });

    return ListTile(
      leading: Icon(Icons.people),
      subtitle: Text("My Trainees"),
      title: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        mainAxisAlignment: MainAxisAlignment.spaceAround,
        children: elements,
      )
    );
  }

}