// ignore: must_be_immutable
import 'package:autocomplete_textfield/autocomplete_textfield.dart';
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/enum/view_state.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/model/search_drug/get_medication_response_model.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/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:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/dialogs/master_key_dailog.dart';
import 'package:doctor_app_flutter/widgets/shared/text_fields/app-textfield-custom.dart';
import 'package:doctor_app_flutter/widgets/shared/text_fields/auto_complete_text_field.dart';
import 'package:doctor_app_flutter/widgets/shared/text_fields/text_fields_utils.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

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

// ignore: must_be_immutable
class AddMedication extends StatefulWidget {
  final Function(MySelectedAllergy mySelectedAllergy) addMedicationFun;
  TextEditingController medicationController;

  AddMedication({Key? key, required this.addMedicationFun, required this.medicationController}) : super(key: key);

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

class _AddMedicationState extends State<AddMedication> {
  MasterKeyModel? _selectedMedicationDose;
  MasterKeyModel? _selectedMedicationStrength;
  MasterKeyModel? _selectedMedicationRoute;
  MasterKeyModel? _selectedMedicationFrequency;

  TextEditingController doseController = TextEditingController();
  TextEditingController strengthController = TextEditingController();
  TextEditingController routeController = TextEditingController();
  TextEditingController frequencyController = TextEditingController();
  GetMedicationResponseModel? _selectedMedication;

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

  @override
  Widget build(BuildContext context) {
    ProjectViewModel projectViewModel = Provider.of(context);
    return FractionallySizedBox(
      child: BaseView<SOAPViewModel>(
        onModelReady: (model) async {
          model.onAddMedicationStart();
        },
        builder: (_, model, w) => AppScaffold(
            baseViewModel: model,
            isShowAppBar: true,
            appBar: BottomSheetTitle(
              title: TranslationBase.of(context).addMedication,
            ),
            body: Center(
              child: Container(
                child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
                  SizedBox(
                    height: 10,
                  ),
                  Expanded(
                    child: FractionallySizedBox(
                        widthFactor: 0.9,
                        child: SingleChildScrollView(
                          child: Column(
                            children: [
                              SizedBox(
                                height: SizeConfig.heightMultiplier! *
                                    (SizeConfig.isHeightVeryShort
                                        ? 2
                                        : SizeConfig.isHeightShort
                                            ? 2
                                            : 2),
                              ),
                              Container(
                                // height: screenSize.height * 0.070,
                                child: InkWell(
                                  onTap: model.allMedicationList != null
                                      ? () {
                                          setState(() {
                                            _selectedMedication = GetMedicationResponseModel();
                                          });
                                        }
                                      : null,
                                  child: _selectedMedication == null
                                      ? CustomAutoCompleteTextField(
                                          isShowError: isFormSubmitted && _selectedMedication == null,
                                          child: AutoCompleteTextField<GetMedicationResponseModel>(
                                            decoration: TextFieldsUtils.textFieldSelectorDecoration(TranslationBase.of(context).searchMedicineNameHere, "", true, suffixIcon: Icons.search),
                                            itemSubmitted: (item) => setState(() => _selectedMedication = item),
                                            key: key,
                                            suggestions: model.allMedicationList!,
                                            itemBuilder: (context, suggestion) => new Padding(child: AppText(suggestion.description! + '/' + suggestion.genericName!), padding: EdgeInsets.all(8.0)),
                                            itemSorter: (a, b) => 1,
                                            itemFilter: (suggestion, input) =>
                                                suggestion.genericName!.toLowerCase().startsWith(input.toLowerCase()) ||
                                                suggestion.description!.toLowerCase().startsWith(input.toLowerCase()) ||
                                                suggestion.keywords!.toLowerCase().startsWith(input.toLowerCase()),
                                          ),
                                        )
                                      : AppTextFieldCustom(
                                          height: Utils.getTextFieldHeight(),
                                          hintText: _selectedMedication != null
                                              ? _selectedMedication!.description! + (' (${_selectedMedication!.genericName} )')
                                              : TranslationBase.of(context).searchMedicineNameHere,
                                          minLines: 1,
                                          maxLines: 1,
                                          isTextFieldHasSuffix: true,
                                          suffixIcon: IconButton(
                                            icon: Icon(
                                              Icons.search,
                                              color: Colors.grey.shade600,
                                            ),
                                            onPressed: () {},
                                          ),
                                          enabled: false,
                                          onChanged: (value) {},
                                          onFieldSubmitted: () {},
                                        ),
                                ),
                              ),
                              if (_selectedMedication != null)
                                Column(
                                  children: [
                                    SizedBox(
                                      height: 3,
                                    ),
                                    Container(
                                      width: MediaQuery.of(context).size.width * 0.7,
                                      child: AppText(
                                        _selectedMedication!.description! + (' (${_selectedMedication!.genericName} )'),
                                        color: Color(0xFF575757),
                                        fontSize: 10,
                                        fontWeight: FontWeight.w700,
                                        letterSpacing: -0.4,
                                      ),
                                    ),
                                  ],
                                ),
                              SizedBox(
                                height: 5,
                              ),
                              AppTextFieldCustom(
                                height: Utils.getTextFieldHeight(),
                                enabled: false,
                                onClick: model.medicationDoseTimeList != null
                                    ? () {
                                        MasterKeyDailog dialog = MasterKeyDailog(
                                          list: model.medicationDoseTimeList,
                                          okText: TranslationBase.of(context).ok,
                                          selectedValue: _selectedMedicationDose,
                                          okFunction: (selectedValue) {
                                            setState(() {
                                              _selectedMedicationDose = selectedValue;

                                              doseController.text = projectViewModel.isArabic ? _selectedMedicationDose!.nameAr! : _selectedMedicationDose!.nameEn!;
                                            });
                                          },
                                        );
                                        showDialog(
                                          barrierDismissible: false,
                                          context: context,
                                          builder: (BuildContext context) {
                                            return dialog;
                                          },
                                        );
                                      }
                                    : null,
                                hintText: TranslationBase.of(context).doseTime,
                                maxLines: 1,
                                minLines: 1,
                                isTextFieldHasSuffix: true,
                                controller: doseController,
                                validationError: isFormSubmitted && _selectedMedicationDose == null ? TranslationBase.of(context).emptyMessage : null,
                                onChanged: (value) {},
                                onFieldSubmitted: () {},
                              ),
                              SizedBox(
                                height: 5,
                              ),
                              AppTextFieldCustom(
                                height: Utils.getTextFieldHeight(),
                                enabled: false,
                                isTextFieldHasSuffix: true,
                                onClick: model.medicationStrengthList != null
                                    ? () {
                                        MasterKeyDailog dialog = MasterKeyDailog(
                                          list: model.medicationStrengthList,
                                          okText: TranslationBase.of(context).ok,
                                          selectedValue: _selectedMedicationStrength,
                                          okFunction: (selectedValue) {
                                            setState(() {
                                              _selectedMedicationStrength = selectedValue;

                                              strengthController.text = projectViewModel.isArabic ? _selectedMedicationStrength!.nameAr! : _selectedMedicationStrength!.nameEn!;
                                            });
                                          },
                                        );
                                        showDialog(
                                          barrierDismissible: false,
                                          context: context,
                                          builder: (BuildContext context) {
                                            return dialog;
                                          },
                                        );
                                      }
                                    : null,
                                hintText: TranslationBase.of(context).strength,
                                maxLines: 1,
                                minLines: 1,
                                controller: strengthController,
                                validationError: isFormSubmitted && _selectedMedicationStrength == null ? TranslationBase.of(context).emptyMessage : null,
                                onChanged: (value) {},
                                onFieldSubmitted: () {},
                              ),
                              SizedBox(
                                height: 5,
                              ),
                              SizedBox(
                                height: 5,
                              ),
                              AppTextFieldCustom(
                                height: Utils.getTextFieldHeight(),
                                enabled: false,
                                isTextFieldHasSuffix: true,
                                onClick: model.medicationRouteList != null
                                    ? () {
                                        MasterKeyDailog dialog = MasterKeyDailog(
                                          list: model.medicationRouteList,
                                          selectedValue: _selectedMedicationRoute,
                                          okText: TranslationBase.of(context).ok,
                                          okFunction: (selectedValue) {
                                            setState(() {
                                              _selectedMedicationRoute = selectedValue;

                                              routeController.text = projectViewModel.isArabic ? _selectedMedicationRoute!.nameAr! : _selectedMedicationRoute!.nameEn!;
                                            });
                                          },
                                        );
                                        showDialog(
                                          barrierDismissible: false,
                                          context: context,
                                          builder: (BuildContext context) {
                                            return dialog;
                                          },
                                        );
                                      }
                                    : null,
                                hintText: TranslationBase.of(context).route,
                                maxLines: 1,
                                minLines: 1,
                                controller: routeController,
                                validationError: isFormSubmitted && _selectedMedicationRoute == null ? TranslationBase.of(context).emptyMessage : null,
                                onChanged: (value) {},
                                onFieldSubmitted: () {},
                              ),
                              SizedBox(
                                height: 5,
                              ),
                              SizedBox(
                                height: 5,
                              ),
                              AppTextFieldCustom(
                                height: Utils.getTextFieldHeight(),
                                onClick: model.medicationFrequencyList != null
                                    ? () {
                                        MasterKeyDailog dialog = MasterKeyDailog(
                                          list: model.medicationFrequencyList,
                                          okText: TranslationBase.of(context).ok,
                                          selectedValue: _selectedMedicationFrequency,
                                          okFunction: (selectedValue) {
                                            setState(() {
                                              _selectedMedicationFrequency = selectedValue;

                                              frequencyController.text = projectViewModel.isArabic ? _selectedMedicationFrequency!.nameAr! : _selectedMedicationFrequency!.nameEn!;
                                            });
                                          },
                                        );
                                        showDialog(
                                          barrierDismissible: false,
                                          context: context,
                                          builder: (BuildContext context) {
                                            return dialog;
                                          },
                                        );
                                      }
                                    : null,
                                hintText: TranslationBase.of(context).frequency,
                                enabled: false,
                                maxLines: 1,
                                minLines: 1,
                                isTextFieldHasSuffix: true,
                                controller: frequencyController,
                                validationError: isFormSubmitted && _selectedMedicationFrequency == null ? TranslationBase.of(context).emptyMessage : null,
                                onChanged: (value) {},
                                onFieldSubmitted: () {},
                              ),
                              SizedBox(
                                height: SizeConfig.heightMultiplier! *
                                    (SizeConfig.isHeightVeryShort
                                        ? 20
                                        : SizeConfig.isHeightShort
                                            ? 15
                                            : 10),
                              ),
                            ],
                          ),
                        )),
                  ),
                ]),
              ),
            ),
            bottomSheet: model.state != ViewState.Idle
                ? Container(
                    height: 0,
                  )
                : CustomBottomSheetContainer(
                    label: TranslationBase.of(context).addMedication,
                    onTap: () {
                      setState(() {
                        isFormSubmitted = true;
                      });
                      if (_selectedMedication != null &&
                          _selectedMedicationDose != null &&
                          _selectedMedicationStrength != null &&
                          _selectedMedicationRoute != null &&
                          _selectedMedicationFrequency != null) {
                        widget.medicationController.text = widget.medicationController.text +
                            '${_selectedMedication!.description} (${TranslationBase.of(context).doseTime} )  ${doseController.text} (${TranslationBase.of(context).strength})   ${strengthController.text}  (${TranslationBase.of(context).route})  ${routeController.text} (${TranslationBase.of(context).frequency})  ${frequencyController.text} \n  \n';
                        Navigator.of(context).pop();
                      }
                    },
                  )),
      ),
    );
  }
}
