import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/core/enum/master_lookup_key.dart';
import 'package:doctor_app_flutter/core/viewModel/SOAP_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart';
import 'package:doctor_app_flutter/models/SOAP/my_selected_history.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/shared/Text.dart';
import 'package:doctor_app_flutter/widgets/shared/TextFields.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/master_key_checkbox_search_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart';
import 'package:eva_icons_flutter/eva_icons_flutter.dart';
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:hexcolor/hexcolor.dart';
import 'package:provider/provider.dart';

class UpdateHistoryWidget extends StatefulWidget {
  final List<MySelectedHistory> myHistoryList;

  const UpdateHistoryWidget({Key key, this.myHistoryList}) : super(key: key);

  @override
  _UpdateHistoryWidgetState createState() => _UpdateHistoryWidgetState();
}

class _UpdateHistoryWidgetState extends State<UpdateHistoryWidget>
    with TickerProviderStateMixin {
  PageController _controller;
  int _currentIndex = 0;

  changePageViewIndex(pageIndex) {
    _controller.jumpToPage(pageIndex);
  }

  @override
  void initState() {
    _controller = new PageController();

    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    ProjectViewModel projectViewModel = Provider.of(context);
    return Column(
      children: [
        Container(
          margin: EdgeInsets.only(left: 10, right: 10, top: 15),
          child: TextFields(
              hintText: TranslationBase.of(context).addHistory,
              fontSize: 13.5,
              onTapTextFields: () {
                openHistoryList(context);
              },
              readOnly: true,
              // hintColor: Colors.black,
              suffixIcon: EvaIcons.plusCircleOutline,
              suffixIconColor: AppGlobal.appPrimaryColor,
              fontWeight: FontWeight.w600,
              // controller: messageController,
              validator: (value) {
                if (value == null)
                  return TranslationBase.of(context)
                      .emptyMessage;
                else
                  return null;
              }),
        ),
        SizedBox(
          height: 20,
        ),
        Container(
          margin:
          EdgeInsets.only(left: 15, right: 15, top: 15),
          child: Column(
            children: widget.myHistoryList.map((myHistory) {
              return Column(
                children: [
                  Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    children: [
                      Container(
                        child: Texts(
                            projectViewModel.isArabic
                                ? myHistory.selectedHistory.nameAr
                                : myHistory.selectedHistory.nameEn,
                            variant: "bodyText",
                            textDecoration: myHistory.isChecked
                                ? null
                                : TextDecoration.lineThrough,
                            bold: true,
                            color: Colors.black),
                        width: MediaQuery.of(context).size.width * 0.7,
                      ),
                      if (myHistory.isChecked)
                        InkWell(
                          child: Icon(
                            FontAwesomeIcons.trash,
                            color: Colors.grey,
                            size: 20,
                          ),
                          onTap: () => removeHistory(myHistory.selectedHistory),
                        )
                    ],
                  ),
                  SizedBox(
                    height: 20,
                  ),
                ],
              );
            }).toList(),
          ),
        )
      ],
    );
  }

  removeHistory(MasterKeyModel historyKey) {
    // Iterable<MasterKeyModel> history = widget.myHistoryList.where((element) =>
    //     masterKey.id == element.id && masterKey.typeId == element.typeId);
    //

    List<MySelectedHistory> history =
    // ignore: missing_return
    widget.myHistoryList.where((element) =>
    historyKey.id ==
        element.selectedHistory.id &&
        historyKey.typeId ==
            element.selectedHistory.typeId
    ).toList();


    if (history.length > 0)
      setState(() {
        history[0].isChecked = false;
      });
  }

  openHistoryList(BuildContext context) {
    showModalBottomSheet(
        backgroundColor: Colors.white,
        isScrollControlled: true,
        context: context,
        builder: (context) {
          return AddHistoryDialog(
            changePageViewIndex: changePageViewIndex,
            controller: _controller,
            myHistoryList: widget.myHistoryList,
            addSelectedHistories: () {
              setState(() {
                Navigator.of(context).pop();
              });
            },
            removeHistory: (masterKey) => removeHistory(masterKey),
          );
        });
  }
}

class PriorityBar extends StatefulWidget {
  final Function onTap;

  const PriorityBar({Key key, this.onTap}) : super(key: key);

  @override
  _PriorityBarState createState() => _PriorityBarState();
}

class _PriorityBarState extends State<PriorityBar> {
  int _activePriority = 0;
  int index =-1;
  List<String> _priorities = [
    "Family",
    "Surgical/Sports",
    "Medical",
  ];
  List<String> _prioritiesAr = [
    "أسرة",
    "جراحي / رياضي" ,
    "طبي",
  ];

  BoxDecoration containerBorderDecoration(
      Color containerColor, Color borderColor) {
    return BoxDecoration(
      color: containerColor,
      shape: BoxShape.rectangle,
      borderRadius: BorderRadius.all(Radius.circular(6)),
      border: Border.fromBorderSide(BorderSide(
        color: borderColor,
        width: 2.0,
      )),
    );
  }

  @override
  Widget build(BuildContext context) {
    final screenSize = MediaQuery.of(context).size;
    ProjectViewModel projectViewModel = Provider.of(context);

    return Container(
      height: screenSize.height * 0.070,
      decoration:
          containerBorderDecoration(Color(0Xffffffff), Color(0xFFCCCCCC)),
      child: Row(
        mainAxisSize: MainAxisSize.max,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: _priorities.map((item,) {
          bool _isActive = _priorities[_activePriority] == item ? true : false;
          if(index <2){
            index++;
          }
          return Expanded(
            child: InkWell(
                child: Center(
                  child: Container(
                      height: screenSize.height * 0.070,
                      decoration: containerBorderDecoration(
                          _isActive ? HexColor("#B8382B") : Colors.white,
                          _isActive ? HexColor("#B8382B") : Colors.white),
                      child: Center(
                        child: Text(
                          (projectViewModel.isArabic)?_prioritiesAr[index]: item,
                          style: TextStyle(
                            fontSize: 12,
                            color: _isActive
                                ? Colors.white
                                : Colors.black, //Colors.black,
                            fontWeight: FontWeight.bold,
                          ),
                        ),
                      )),
                ),
                onTap: () {
                  widget.onTap(_priorities.indexOf(item));

                  setState(() {
                    _activePriority = _priorities.indexOf(item);
                  });
                }),
          );
        }).toList(),
      ),
    );
  }
}

class AddHistoryDialog extends StatefulWidget {
  final Function changePageViewIndex;
  final PageController controller;
  final List<MySelectedHistory> myHistoryList;
  final Function addSelectedHistories;
  final Function (MasterKeyModel) removeHistory;

  const AddHistoryDialog(
      {Key key, this.changePageViewIndex, this.controller, this.myHistoryList, this.addSelectedHistories, this.removeHistory})
      : super(key: key);

  @override
  _AddHistoryDialogState createState() => _AddHistoryDialogState();
}

class _AddHistoryDialogState extends State<AddHistoryDialog> {
  @override
  Widget build(BuildContext context) {
    return FractionallySizedBox(
        heightFactor: 0.7,
        child: BaseView<SOAPViewModel>(
          onModelReady: (model) async {
            if (model.historyFamilyList.length == 0) {
              await model.getMasterLookup(MasterKeysService.HistoryFamily);
            }

            if (model.historySurgicalList.length == 0) {
              await model.getMasterLookup(MasterKeysService.HistorySurgical);
              await model.getMasterLookup(MasterKeysService.HistorySports);
            }

            if (model.historyMedicalList.length == 0) {
              await model.getMasterLookup(MasterKeysService.HistoryMedical);
            }
          },
          builder: (_, model, w) => AppScaffold(
            baseViewModel: model,
            isShowAppBar: false,
            body: Center(
              child: Container(
                  child: FractionallySizedBox(
                    widthFactor: 0.9,
                    child: Column(
                      children: [
                        SizedBox(
                          height: 10,
                        ),
                    PriorityBar(onTap: (activePriority) async {
                      widget.changePageViewIndex(activePriority);
                    }),
                    SizedBox(
                      height: 20,
                    ),
                    Expanded(
                      child: PageView(
                        physics: NeverScrollableScrollPhysics(),
                        controller: widget.controller,
                        onPageChanged: (index) {
                          setState(() {
                            // currentIndex = index;
                          });
                        },
                        scrollDirection: Axis.horizontal,
                        children: <Widget>[
                          NetworkBaseView(
                            baseViewModel: model,
                            child: MasterKeyCheckboxSearchWidget(
                              model: model,
                              masterList: model.historyFamilyList,
                              removeHistory: (history){
                                setState(() {
                                  widget.removeHistory(history);
                                });
                              },
                              addHistory: (history){
                                setState(() {
                                  createAndAddHistory(
                                      history);
                                });
                              },
                              addSelectedHistories: (){
                                widget.addSelectedHistories();
                              },
                              isServiceSelected: (master) =>isServiceSelected(master),
                            ),
                          ),
                          NetworkBaseView(
                            baseViewModel: model,
                            child: MasterKeyCheckboxSearchWidget(
                              model: model,
                              masterList: model.mergeHistorySurgicalWithHistorySportList,
                              removeHistory: (history){
                                setState(() {
                                  widget.removeHistory(history);
                                });
                              },
                              addHistory: (history){
                                setState(() {
                                  createAndAddHistory(
                                      history);
                                });
                              },
                              addSelectedHistories: (){
                                widget.addSelectedHistories();
                              },
                              isServiceSelected: (master) =>isServiceSelected(master),
                            ),
                          ),
                          NetworkBaseView(
                            baseViewModel: model,
                            child: MasterKeyCheckboxSearchWidget(
                              model: model,
                              masterList: model.historyMedicalList,
                              removeHistory: (history){
                                setState(() {
                                  widget.removeHistory(history);
                                });
                              },
                              addHistory: (history){
                                setState(() {
                                  createAndAddHistory(
                                      history);
                                });
                              },
                              addSelectedHistories: (){
                                widget.addSelectedHistories();
                              },
                              isServiceSelected: (master) =>isServiceSelected(master),
                            ),
                          ),
                        ],
                      ),
                    ),
                  ],
                ),
                  )),
            ),
          ),
        ));
  }

  createAndAddHistory(MasterKeyModel history) {
    List<MySelectedHistory> myhistory = widget.myHistoryList.where((element) =>
    history.id ==
        element.selectedHistory.id &&
        history.typeId ==
            element.selectedHistory.typeId
    ).toList();

    if (myhistory.isEmpty) {
      setState(() {
        MySelectedHistory mySelectedHistory = MySelectedHistory(
            remark: history.remarks ?? "",
            selectedHistory: history,
            isChecked: true);
        widget.myHistoryList.add(mySelectedHistory);
      });
    } else {
      myhistory.first.isChecked = true;
    }
  }

  isServiceSelected(MasterKeyModel masterKey) {
    Iterable<MySelectedHistory> history =
    widget
        .myHistoryList
        .where((element) =>
    masterKey.id == element.selectedHistory.id &&
        masterKey.typeId == element.selectedHistory.typeId &&
        element.isChecked);
    if (history.length > 0) {
      return true;
    }
    return false;
  }

}
