import 'package:autocomplete_textfield/autocomplete_textfield.dart';
import 'package:doctor_app_flutter/core/model/SOAP/master_key_model.dart';
import 'package:doctor_app_flutter/core/model/SOAP/selected_items/my_selected_allergy.dart';
import 'package:doctor_app_flutter/core/viewModel/SOAP_view_model.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart';
import 'package:doctor_app_flutter/utils/utils.dart';
import 'package:doctor_app_flutter/widgets/bottom_sheet/custom_bottom_sheet_container.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
import 'package:flutter/material.dart';

import '../../shared_soap_widgets/bottom_sheet_title.dart';
import 'master_key_checkbox_search_allergies_widget.dart';

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 = [];
  List<MySelectedAllergy> myAllergiesListLocal = [];

  @override
  initState() {
    super.initState();
    myAllergiesListLocal = [...?widget.myAllergiesList];
  }

  GlobalKey key = new GlobalKey<AutoCompleteTextFieldState<MasterKeyModel>>();
  bool isFormSubmitted = false;

  @override
  Widget build(BuildContext context) {
    return AppScaffold(
      // baseViewModel: model,
      isShowAppBar: true,
      appBar: BottomSheetTitle(
        title: TranslationBase.of(context).addAllergies,
      ),
      body: Center(
        child: Container(
          child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
            SizedBox(
              height: 10,
            ),
            SizedBox(
              height: 16,
            ),
            Expanded(
              child: Center(
                child: FractionallySizedBox(
                  widthFactor: 0.9,
                  child: Center(
                    child: BaseView<SOAPViewModel>(
                        onModelReady: (model) async {},
                        builder: (_, model, w) {
                          return MasterKeyCheckboxSearchAllergiesWidget(
                            model: model,
                            masterList: model.allergiesList,
                            removeAllergy: (master) {
                              // setState(() {
                              //   removeAllergyFromLocalList(master);
                              // });
                            },
                            addAllergy: (MySelectedAllergy mySelectedAllergy) {
                              addAllergyLocally(mySelectedAllergy);
                            },
                            addSelectedAllergy: () {
                              setState(() {
                                widget.addAllergiesFun!(myAllergiesListLocal);
                              });
                            },
                            isServiceSelected: (master) => isServiceSelected(master),
                            getServiceSelectedAllergy: (master) => getSelectedAllergy(master),
                          );
                        }),
                  ),
                ),
              ),
            ),
            SizedBox(
              height: MediaQuery.of(context).size.height * 0.11,
            ),
          ]),
        ),
      ),
      bottomSheet:
          // model.state != ViewState.Idle
          //     ?
          // Container(
          //         height: 0,
          //       )
          //     :
          CustomBottomSheetContainer(
        label: TranslationBase.of(context).addAllergies,
        onTap: () {
          setState(() {
            widget.addAllergiesFun!(myAllergiesListLocal);
          });
        },
      ),
    );
  }

  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 MySelectedAllergy();
  }

  addAllergyLocally(MySelectedAllergy mySelectedAllergy) {
    if (mySelectedAllergy.selectedAllergy == null) {
      Utils.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);
        } else {
          allergy.first.selectedAllergy = mySelectedAllergy.selectedAllergy;
          allergy.first.selectedAllergySeverity = mySelectedAllergy.selectedAllergySeverity;
          allergy.first.remark = mySelectedAllergy.remark;
          allergy.first.isChecked = mySelectedAllergy.isChecked;
        }
      });
    }
  }
}
