import 'package:autocomplete_textfield/autocomplete_textfield.dart';
import 'package:doctor_app_flutter/config/size_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_allergy.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/app_texts_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/divider_with_spaces_around.dart';
import 'package:doctor_app_flutter/widgets/shared/master_key_checkbox_search_allergies_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 UpdateAllergiesWidget extends StatefulWidget {
   List<MySelectedAllergy> myAllergiesList;

  UpdateAllergiesWidget({Key key, this.myAllergiesList});

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

class _UpdateAllergiesWidgetState extends State<UpdateAllergiesWidget> {
  @override
  Widget build(BuildContext context) {
    ProjectViewModel projectViewModel = Provider.of(context);
    changeAllState() {
      setState(() {

      });
    }

    return Column(
      children: [
        InkWell(
          onTap: () {
            openAllergiesList(context, changeAllState);
          },
          child: Container(
            padding: EdgeInsets.symmetric(
                vertical: 8, horizontal: 8.0),
            margin:
            EdgeInsets.symmetric(vertical: 8),
            decoration: BoxDecoration(
              border: Border.all(
                  color: Colors.grey.shade400,
                  width: 0.5),
              borderRadius: BorderRadius.all(
                Radius.circular(8),
              ),
              color: Colors.white,
            ),
            child: Row(
              mainAxisAlignment:
              MainAxisAlignment.spaceBetween,
              crossAxisAlignment:
              CrossAxisAlignment.center,
              children: [
                Expanded(
                    child: Column(
                      crossAxisAlignment:
                      CrossAxisAlignment.start,
                      children: [
                        AppText(
                          "${TranslationBase.of(context).addAllergies}",
                          fontSize: SizeConfig
                              .textMultiplier *
                              1.8,
                          color: Colors.black,
                          fontWeight: FontWeight.bold,
                        ),
                        AppText(
                          "${TranslationBase.of(context).searchHere}",
                          fontSize: SizeConfig
                              .textMultiplier *
                              1.8,
                          color: Colors.grey.shade700,
                          fontWeight: FontWeight.bold,
                        ),
                      ],
                    )),
                Icon(
                  Icons.add_box_rounded,
                  size: 25,
                )
              ],
            ),
          ),
        ),
        SizedBox(
          height: 20,
        ),
        Container(
          margin:
          EdgeInsets.only(left: 15, right: 15, top: 15),
          child: Column(
              children: widget.myAllergiesList.map((selectedAllergy) {
                return Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  mainAxisAlignment: MainAxisAlignment.start,
                  children: [
                Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    Row(
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: [
                        Container(
                          child: Column(
                            crossAxisAlignment: CrossAxisAlignment.start,
                            children: [
                              Texts(
                                  projectViewModel.isArabic
                                      ? selectedAllergy.selectedAllergy.nameAr
                                      : selectedAllergy.selectedAllergy.nameEn
                                      .toUpperCase(),
                                  // variant: "bodyText",
                                  textDecoration: selectedAllergy.isChecked
                                      ? null
                                      : TextDecoration.lineThrough,
                                  bold: true,
                                  color: Color(0xFF2B353E)),
                              Texts(
                                  projectViewModel.isArabic
                                      ? selectedAllergy.selectedAllergySeverity
                                      .nameAr
                                      : selectedAllergy.selectedAllergySeverity
                                      .nameEn
                                      .toUpperCase(),
                                  // variant: "bodyText",
                                  textDecoration: selectedAllergy.isChecked
                                      ? null
                                      : TextDecoration.lineThrough,
                                  // bold: true,
                                  color: Color(0xFFCC9B14)),
                            ],
                          ),
                          width: MediaQuery
                              .of(context)
                              .size
                              .width * 0.5,
                        ),

                        if (selectedAllergy.isChecked)
                          InkWell(
                            child: Row(
                              children: [Container(
                                child: Texts(
                                  TranslationBase
                                      .of(context)
                                      .remove,
                                  fontSize: 15,
                                  variant: "bodyText",
                                  color: HexColor("#B8382C"),),
                              ),
                                Icon(
                                  FontAwesomeIcons.times,
                                  color: HexColor("#B8382C"),
                                  size: 20,
                                ),
                              ],
                            ),
                            onTap: () => removeAllergy(selectedAllergy),
                          )
                      ],
                    ),
                    Padding(
                      padding: const EdgeInsets.symmetric(vertical: 8),
                      child: Row(
                        children: [
                          Container(
                            width: MediaQuery.of(context).size.width * 0.55,
                            child: AppText(
                              selectedAllergy.remark ?? '',
                              fontSize: 10,
                              color: Colors.grey,
                            ),
                          ),
                        ],
                      ),
                    ),
                    DividerWithSpacesAround()
                  ],
                ),
                SizedBox(
                  height: 10,
                ),
              ],
            );
          }).toList()),
        )
      ],
    );
  }

  removeAllergy(MySelectedAllergy mySelectedAllergy) {
    List<MySelectedAllergy> allergy =
    // ignore: missing_return
    widget.myAllergiesList.where((element) =>
    mySelectedAllergy.selectedAllergySeverity.id ==
        element.selectedAllergySeverity.id &&
        mySelectedAllergy.selectedAllergy.id == element.selectedAllergy.id
    ).toList();

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


    print(allergy);
  }

  openAllergiesList(BuildContext context, Function changeParentState) {
    showModalBottomSheet(
        backgroundColor: Colors.white,
        isScrollControlled: true,
        isDismissible: false,
        context: context,
        builder: (context) {
          return AddAllergies(
            myAllergiesList: widget.myAllergiesList,
              addAllergiesFun: (List<MySelectedAllergy> mySelectedAllergy) {
                bool isAllDataFilled = true;
                mySelectedAllergy.forEach((element) {
                  if (element.selectedAllergySeverity == null) {
                    isAllDataFilled = false;
                  }
                });
                if (isAllDataFilled) {
                  mySelectedAllergy.forEach((element) {
                    if (!widget.myAllergiesList.contains(element)) {
                      widget.myAllergiesList.add(element);
                    }
                  });
                  changeParentState();
                  Navigator.of(context).pop();
                } else {
                  helpers.showErrorToast(TranslationBase
                      .of(context)
                      .requiredMsg);
                }
              });
        });
  }

}

class AddAllergies extends StatefulWidget {
  final Function addAllergiesFun;
  final List<MySelectedAllergy> myAllergiesList;

  const AddAllergies({Key key, this.addAllergiesFun, this.myAllergiesList}) : super(key: key);

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

class _AddAllergiesState extends State<AddAllergies> {
  List<MasterKeyModel> allergiesList;
  List<MasterKeyModel> allergySeverityList;
  MasterKeyModel _selectedAllergySeverity;
  MasterKeyModel _selectedAllergy;
  TextEditingController remarkController = TextEditingController();
  TextEditingController severityController = TextEditingController();
  TextEditingController allergyController = TextEditingController();
  List<MySelectedAllergy> myAllergiesListLocal;

  @override
  initState(){
    super.initState();
    myAllergiesListLocal = [...widget.myAllergiesList];
  }
  GlobalKey key = new GlobalKey<AutoCompleteTextFieldState<MasterKeyModel>>();
  bool isFormSubmitted = false;

  InputDecoration textFieldSelectorDecoration(
      String hintText, String selectedText, bool isDropDown,
      {IconData icon}) {
    return InputDecoration(
      contentPadding: EdgeInsets.symmetric(vertical: 10, horizontal: 10),
      focusedBorder: OutlineInputBorder(
        borderSide: BorderSide(color: Colors.grey, width: 1.0),
        borderRadius: BorderRadius.circular(8),
      ),
      enabledBorder: OutlineInputBorder(
        borderSide: BorderSide(color: Colors.grey, width: 1.0),
        borderRadius: BorderRadius.circular(8),
      ),
      disabledBorder: OutlineInputBorder(
        borderSide: BorderSide(color: Colors.grey, width: 1.0),
        borderRadius: BorderRadius.circular(8),
      ),
      hintText: selectedText != null ? selectedText : hintText,
      suffixIcon: isDropDown ? Icon(icon ?? Icons.arrow_drop_down) : null,
      hintStyle: TextStyle(
        fontSize: 10,
        color: Theme
            .of(context)
            .hintColor,
        fontWeight: FontWeight.w700
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    ProjectViewModel projectViewModel = Provider.of(context);
    final screenSize = MediaQuery
        .of(context)
        .size;
    return FractionallySizedBox(
      heightFactor: 1,
      child: BaseView<SOAPViewModel>(
        onModelReady: (model) async {
          if (model.allergiesList.length == 0) {
            await model.getMasterLookup(MasterKeysService.Allergies);
          }
          if (model.allergySeverityList.length == 0) {
            await model.getMasterLookup(MasterKeysService.AllergySeverity);
          }
        },
        builder: (_, model, w) =>
            AppScaffold(
                baseViewModel: model,
                isShowAppBar: false,
                body: Center(
                  child: Container(
                    child: Column(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: [

                          Container(
                            padding: EdgeInsets.only(
                                left: 0, right: 5, bottom: 5, top: 5),
                            decoration: BoxDecoration(
                              color: Colors.white,
                            ),
                            height: 115,
                            child: Container(
                              padding: EdgeInsets.only(
                                  left: 10, right: 10),
                              margin: EdgeInsets.only(top: 40),
                              child: Column(
                                children: [
                                  Row(
                                    mainAxisAlignment:
                                    MainAxisAlignment.spaceBetween,
                                    children: [
                                      RichText(
                                        text: TextSpan(
                                          style: TextStyle(
                                              fontSize:20,
                                              color: Colors.black),
                                          children: <TextSpan>[
                                            new TextSpan(
                                                text: TranslationBase.of(context).
                                                addAllergies,
                                                style: TextStyle(
                                                    color: Color(0xFF2B353E),
                                                    fontWeight: FontWeight.bold,
                                                    fontFamily: 'Poppins',
                                                    fontSize: 20)),
                                          ],
                                        ),
                                      ),
                                      InkWell(
                                          onTap: () {
                                            Navigator.pop(context);
                                          },
                                          child: Icon(FontAwesomeIcons.times,
                                              size: 30,
                                              color: Color(0xFF2B353E)))
                                    ],
                                  ),
                                ],
                              ),
                            ),
                          ),
                          SizedBox(
                            height: 10,
                          ),
                          SizedBox(
                            height: 16,
                          ),
                          Expanded(
                            child: Center(
                              child: FractionallySizedBox(
                                widthFactor: 0.9,
                                child: Center(
                                  child: NetworkBaseView(
                                    baseViewModel: model,
                                    child: MasterKeyCheckboxSearchAllergiesWidget(
                                      model: model,
                                      masterList: model.allergiesList,
                                      removeAllergy: (master) {
                                        setState(() {
                                          removeAllergyFromLocalList(master);
                                        });
                                      },
                                      addAllergy: (MySelectedAllergy mySelectedAllergy){
                                        AddAllergyLocally(mySelectedAllergy);
                                      },
                                      addSelectedAllergy: ()=>
                                        widget.addAllergiesFun(myAllergiesListLocal)
                                      ,
                                      isServiceSelected: (master) =>isServiceSelected(master),
                                      getServiceSelectedAllergy: (master)=>getSelectedAllergy(master),
                                    ),
                                  ),
                                ),
                              ),
                            ),
                          ),
                        ]

                    ),
                  ),
                )

            ),
      ),
    );
  }

  isServiceSelected(MasterKeyModel masterKey) {
    Iterable<MySelectedAllergy> allergy =
    myAllergiesListLocal.where((element) =>
    masterKey.id == element.selectedAllergy.id &&
        masterKey.typeId == element.selectedAllergy.typeId &&
        element.isChecked);
    if (allergy.length > 0) {
      return true;
    }
    return false;
  }

  removeAllergyFromLocalList(MasterKeyModel masterKey) {
    myAllergiesListLocal.removeWhere((element) =>
    element.selectedAllergy.id == masterKey.id);
  }

  MySelectedAllergy getSelectedAllergy(MasterKeyModel masterKey) {
    Iterable<MySelectedAllergy> allergy =
    myAllergiesListLocal.where((element) =>
    masterKey.id == element.selectedAllergy.id &&
        masterKey.typeId == element.selectedAllergy.typeId &&
        element.isChecked);
    if (allergy.length > 0) {
      return allergy.first;
    }
    return null;
  }

  AddAllergyLocally(MySelectedAllergy mySelectedAllergy) {
    if (
        mySelectedAllergy.selectedAllergy == null) {
      helpers.showErrorToast(TranslationBase
          .of(context)
          .requiredMsg);

    } else {
      setState(() {
        List<MySelectedAllergy> allergy =
        // ignore: missing_return
        myAllergiesListLocal
            .where((element) =>
        mySelectedAllergy.selectedAllergy.id ==
            element.selectedAllergy.id)
            .toList();

        if (allergy.isEmpty) {
          myAllergiesListLocal.add(mySelectedAllergy);
          // Navigator.of(context).pop();
        } else {
          allergy.first.selectedAllergy =
              mySelectedAllergy.selectedAllergy;
          allergy.first.selectedAllergySeverity =
              mySelectedAllergy.selectedAllergySeverity;
          allergy.first.remark = mySelectedAllergy.remark;
          allergy.first.isChecked = mySelectedAllergy.isChecked;
          // Navigator.of(context).pop();

          // helpers.showErrorToast(TranslationBase
          //     .of(context)
          //     .itemExist);
        }
      });
    }}

}






