import 'package:autocomplete_textfield/autocomplete_textfield.dart';
import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/model/Prescriptions/post_prescrition_req_model.dart';
import 'package:doctor_app_flutter/core/model/Prescriptions/prescription_model.dart';
import 'package:doctor_app_flutter/core/model/search_drug/get_medication_response_model.dart';
import 'package:doctor_app_flutter/core/provider/robot_provider.dart';
import 'package:doctor_app_flutter/core/service/AnalyticsService.dart';
import 'package:doctor_app_flutter/core/viewModel/medicine_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/prescription_view_model.dart';
import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart';
import 'package:doctor_app_flutter/locator.dart';
import 'package:doctor_app_flutter/models/SOAP/GetAssessmentReqModel.dart';
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/screens/prescription/drugtodrug.dart';
import 'package:doctor_app_flutter/screens/prescription/prescription_text_filed.dart';
import 'package:doctor_app_flutter/util/date-utils.dart';
import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart';
import 'package:doctor_app_flutter/util/helpers.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/medicine/medicine_item_widget.dart';
import '../../widgets/shared/text_fields/TextFields.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/buttons/app_buttons_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart';
import 'package:doctor_app_flutter/widgets/shared/speech-text-popup.dart';
import 'package:doctor_app_flutter/widgets/shared/text_fields/app-textfield-custom.dart';
import 'package:doctor_app_flutter/widgets/shared/text_fields/app_text_form_field.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:hexcolor/hexcolor.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:speech_to_text/speech_recognition_error.dart';
import 'package:speech_to_text/speech_to_text.dart' as stt;

addPrescriptionForm(context, PrescriptionViewModel model, PatiantInformtion patient, prescription) {
  showModalBottomSheet(
      isScrollControlled: true,
      context: context,
      builder: (BuildContext bc) {
        return PrescriptionFormWidget(model, patient, prescription);
      });
}

postPrescription(
    {String? duration,
    String? doseTimeIn,
    String? dose,
    String? drugId,
    String? strength,
    String? route,
    String? frequency,
    String? indication,
    String? instruction,
    PrescriptionViewModel? model,
    DateTime? doseTime,
    String? doseUnit,
    String? icdCode,
    PatiantInformtion? patient,
    String? patientType}) async {
  PostPrescriptionReqModel postProcedureReqModel = new PostPrescriptionReqModel();
  List<PrescriptionRequestModel> prescriptionList = [];

  postProcedureReqModel.appointmentNo = patient!.appointmentNo;
  postProcedureReqModel.clinicID = patient.clinicId;
  postProcedureReqModel.episodeID = patient.episodeNo;
  postProcedureReqModel.patientMRN = patient.patientMRN;

  prescriptionList.add(PrescriptionRequestModel(
      covered: true,
      dose: double.parse(dose ?? "0"),
      itemId: drugId!.isEmpty ? 1 : int.parse(drugId),
      doseUnitId: int.parse(doseUnit ?? "1"),
      route: route!.isEmpty ? 1 : int.parse(route),
      frequency: frequency!.isEmpty ? 1 : int.parse(frequency),
      remarks: instruction,
      approvalRequired: true,
      icdcode10Id: icdCode.toString(),
      doseTime: doseTimeIn!.isEmpty ? 1 : int.parse(doseTimeIn),
      duration: duration!.isEmpty ? 1 : int.parse(duration),
      doseStartDate: doseTime!.toIso8601String()));
  postProcedureReqModel.prescriptionRequestModel = prescriptionList;
  await model!.postPrescription(postProcedureReqModel, patient.patientMRN!);

  if (model.state == ViewState.Error) {
    Helpers.showErrorToast(model.error);
  } else if (model.state == ViewState.Idle) {
    model.getPrescriptions(patient);
    DrAppToastMsg.showSuccesToast('Medication has been added');
  }
}

class PrescriptionFormWidget extends StatefulWidget {
  final PrescriptionViewModel model;
  final PatiantInformtion patient;
  final List<PrescriptionModel> prescriptionList;

  PrescriptionFormWidget(this.model, this.patient, this.prescriptionList);

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

class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
  String? routeError;
  String? frequencyError;
  String? doseTimeError;
  String? durationError;
  String? unitError;
  String? strengthError;

  late int selectedType;
  bool isSubmitted = false;

  TextEditingController strengthController = TextEditingController();
  TextEditingController indicationController = TextEditingController();
  TextEditingController instructionController = TextEditingController();

  bool visbiltyPrescriptionForm = false;
  bool visbiltySearch = true;

  final myController = TextEditingController();
  DateTime? selectedDate;
  int? strengthChar;
  GetMedicationResponseModel? _selectedMedication;
  GlobalKey key = new GlobalKey<AutoCompleteTextFieldState<GetMedicationResponseModel>>();

  TextEditingController drugIdController = TextEditingController();
  TextEditingController doseController = TextEditingController();
  final searchController = TextEditingController();
  stt.SpeechToText speech = stt.SpeechToText();
  var event = RobotProvider();
  var reconizedWord;

  final GlobalKey<FormState> formKey = GlobalKey<FormState>();
  final double spaceBetweenTextFileds = 12;
  dynamic route;
  dynamic frequency;
  dynamic duration;
  dynamic doseTime;
  dynamic indication;
  dynamic units;
  dynamic uom;
  dynamic box;
  dynamic x;

  @override
  void initState() {
    requestPermissions();
    event.controller.stream.listen((p) {
      if (p['startPopUp'] == 'true') {
        if (this.mounted) {
          initSpeechState().then((value) => {onVoiceText()});
        }
      }
    });
    selectedType = 1;
    super.initState();
  }

  setSelectedType(int val) {
    setState(() {
      selectedType = val;
    });
  }

  onVoiceText() async {
    new SpeechToText(context: context).showAlertDialog(context);
    var lang = TranslationBase.of(AppGlobal.CONTEX).locale.languageCode;
    bool available = await speech.initialize(onStatus: statusListener, onError: errorListener);
    if (available) {
      speech.listen(
        onResult: resultListener,
        listenMode: stt.ListenMode.confirmation,
        localeId: lang == 'en' ? 'en-US' : 'ar-SA',
      );
    } else {
      print("The user has denied the use of speech recognition.");
    }
  }

  void errorListener(SpeechRecognitionError error) {
    event.setValue({"searchText": 'null'});
    print(error);
  }

  void statusListener(String status) {
    reconizedWord = status == 'listening' ? 'Lisening...' : 'Sorry....';
  }

  void requestPermissions() async {
    Map<Permission, PermissionStatus> statuses = await [
      Permission.microphone,
    ].request();
  }

  void resultListener(result) {
    reconizedWord = result.recognizedWords;
    event.setValue({"searchText": reconizedWord});

    if (result.finalResult == true) {
      setState(() {
        SpeechToText.closeAlertDialog(context);
        speech.stop();
        instructionController.text += reconizedWord + '\n';
      });
    } else {
      print(result.finalResult);
    }
  }

  Future<void> initSpeechState() async {
    bool hasSpeech = await speech.initialize(onError: errorListener, onStatus: statusListener);
    print(hasSpeech);
    if (!mounted) return;
  }

  @override
  Widget build(BuildContext context) {
    final screenSize = MediaQuery.of(context).size;
    return BaseView<MedicineViewModel>(
      onModelReady: (model) async {
        x = model.patientAssessmentList.map((element) {
          return element.icdCode10ID;
        });
        GetAssessmentReqModel getAssessmentReqModel = GetAssessmentReqModel(
            patientMRN: widget.patient.patientMRN,
            episodeID: widget.patient.episodeNo.toString(),
            editedBy: '',
            doctorID: '',
            appointmentNo: widget.patient.appointmentNo);
        if (model.medicationStrengthList.length == 0) {
          await model.getMedicationStrength();
        }
        if (model.medicationDurationList.length == 0) {
          await model.getMedicationDuration();
        }
        if (model.medicationDoseTimeList.length == 0) {
          await model.getMedicationDoseTime();
        }
        await model.getPatientAssessment(getAssessmentReqModel);
      },
      builder: (
        BuildContext context,
        MedicineViewModel model,
        Widget? child,
      ) =>
          NetworkBaseView(
        baseViewModel: model,
        child: GestureDetector(
          onTap: () {
            FocusScope.of(context).requestFocus(new FocusNode());
          },
          child: DraggableScrollableSheet(
              initialChildSize: 0.98,
              maxChildSize: 0.98,
              minChildSize: 0.9,
              builder: (BuildContext context, ScrollController scrollController) {
                return SingleChildScrollView(
                  child: Container(
                    height: MediaQuery.of(context).size.height * 1.65,
                    color: Color(0xffF8F8F8),
                    child: Padding(
                      padding: EdgeInsets.symmetric(horizontal: 12.0, vertical: 10.0),
                      child: Column(
                        children: [
                          Column(
                            children: [
                              SizedBox(
                                height: 60,
                              ),
                            ],
                          ),
                          SizedBox(
                            height: spaceBetweenTextFileds,
                          ),
                          Container(
                            child: Form(
                              key: formKey,
                              child: Column(
                                children: [
                                  FractionallySizedBox(
                                    widthFactor: 0.9,
                                    child: Container(
                                      decoration: BoxDecoration(
                                          borderRadius: BorderRadius.all(Radius.circular(6.0)),
                                          border: Border.all(width: 1.0, color: HexColor("#CCCCCC"))),
                                      padding: EdgeInsets.all(10),
                                      child: AppTextFormField(
                                        onTap: () {
                                          visbiltyPrescriptionForm = false;
                                          visbiltySearch = true;
                                        },
                                        borderColor: Colors.white,
                                        hintText: TranslationBase.of(context).searchMedicineNameHere,
                                        controller: myController,
                                        onSaved: (value) {},
                                        onFieldSubmitted: (value) {
                                          searchMedicine(context, model);
                                        },
                                        inputFormatter: ONLY_LETTERS,
                                      ),
                                    ),
                                  ),
                                  SizedBox(
                                    height: 15.0,
                                  ),
                                  Visibility(
                                    visible: visbiltySearch,
                                    child: Container(
                                      child: Column(
                                        children: [
                                          FractionallySizedBox(
                                            widthFactor: 0.8,
                                            child: Container(
                                              child: Wrap(
                                                alignment: WrapAlignment.center,
                                                children: <Widget>[
                                                  // TODO change it secondary button and add loading
                                                  AppButton(
                                                    title: TranslationBase.of(context).search,
                                                    onPressed: () async {
                                                      await searchMedicine(context, model);
                                                    },
                                                  ),
                                                ],
                                              ),
                                            ),
                                          ),
                                          if (myController.text != '')
                                            Container(
                                              height: MediaQuery.of(context).size.height * 0.5,
                                              child: ListView.builder(
                                                padding: const EdgeInsets.only(top: 20),
                                                scrollDirection: Axis.vertical,
                                                itemCount: model.allMedicationList == null
                                                    ? 0
                                                    : model.allMedicationList.length,
                                                itemBuilder: (BuildContext context, int index) {
                                                  return InkWell(
                                                    child: MedicineItemWidget(
                                                        label: model.allMedicationList[index].description),
                                                    onTap: () {
                                                      model.getItem(itemID: model.allMedicationList[index].itemId!);
                                                      visbiltyPrescriptionForm = true;
                                                      visbiltySearch = false;
                                                      _selectedMedication = model.allMedicationList[index];
                                                      uom = _selectedMedication!.uom;
                                                    },
                                                  );
                                                },
                                              ),
                                            ),
                                        ],
                                      ),
                                    ),
                                  ),
                                  SizedBox(
                                    height: spaceBetweenTextFileds,
                                  ),
                                  Visibility(
                                    visible: visbiltyPrescriptionForm,
                                    child: Container(
                                      child: Column(
                                        children: [
                                          AppText(
                                            _selectedMedication?.description ?? "",
                                            bold: true,
                                          ),
                                          Container(
                                            child: Row(
                                              children: [
                                                AppText(
                                                  TranslationBase.of(context).orderType,
                                                  fontWeight: FontWeight.w600,
                                                ),
                                                Radio(
                                                  activeColor: Color(0xFFB9382C),
                                                  value: 1,
                                                  groupValue: selectedType,
                                                  onChanged: (int? value) {
                                                    setSelectedType(value!);
                                                  },
                                                ),
                                                Text(TranslationBase.of(context).regular ?? ""),
                                              ],
                                            ),
                                          ),
                                          SizedBox(height: spaceBetweenTextFileds),
                                          Container(
                                            width: double.infinity,
                                            child: Row(
                                              children: [
                                                Container(
                                                  width: MediaQuery.of(context).size.width * 0.35,
                                                  child: AppTextFieldCustom(
                                                    height: 40,
                                                    validationError: strengthError,
                                                    hintText: 'Strength',
                                                    isTextFieldHasSuffix: false,
                                                    enabled: true,
                                                    controller: strengthController,
                                                    onChanged: (String value) {
                                                      setState(() {
                                                        strengthChar = value.length;
                                                      });
                                                      if (strengthChar! >= 5) {
                                                        DrAppToastMsg.showErrorToast(
                                                          TranslationBase.of(context).only5DigitsAllowedForStrength,
                                                        );
                                                      }
                                                    },
                                                    inputType: TextInputType.numberWithOptions(
                                                      decimal: true,
                                                    ),
                                                  ),
                                                ),
                                                SizedBox(
                                                  width: 5.0,
                                                ),
                                                PrescriptionTextFiled(
                                                  isSubmitted: isSubmitted,
                                                  width: MediaQuery.of(context).size.width * 0.517,
                                                  element: model.itemMedicineListUnit.length == 1
                                                      ? model.itemMedicineListUnit[0]
                                                      : units,
                                                  elementError: unitError,
                                                  keyName: 'description',
                                                  keyId: 'parameterCode',
                                                  hintText: 'Select',
                                                  elementList: model.itemMedicineListUnit,
                                                  okFunction: (selectedValue) {
                                                    setState(() {
                                                      units = selectedValue;
                                                      units['isDefault'] = true;
                                                    });
                                                  },
                                                ),
                                              ],
                                            ),
                                          ),
                                          SizedBox(height: spaceBetweenTextFileds),
                                          PrescriptionTextFiled(
                                            isSubmitted: isSubmitted,
                                            elementList: model.itemMedicineListRoute,
                                            element: model.itemMedicineListRoute.length == 1
                                                ? model.itemMedicineListRoute[0]
                                                : route,
                                            elementError: routeError,
                                            keyId: 'parameterCode',
                                            keyName: 'description',
                                            okFunction: (selectedValue) {
                                              setState(() {
                                                route = selectedValue;
                                                route['isDefault'] = true;
                                              });
                                            },
                                            hintText: TranslationBase.of(context).route ?? "",
                                          ),
                                          SizedBox(height: spaceBetweenTextFileds),
                                          PrescriptionTextFiled(
                                              isSubmitted: isSubmitted,
                                              hintText: TranslationBase.of(context).frequency ?? "",
                                              elementError: frequencyError ?? "",
                                              element: model.itemMedicineList.length == 1
                                                  ? frequency = model.itemMedicineList[0]
                                                  : frequency,
                                              elementList: model.itemMedicineList,
                                              keyId: 'parameterCode',
                                              keyName: 'description',
                                              okFunction: (selectedValue) {
                                                setState(() {
                                                  frequency = selectedValue;
                                                  frequency['isDefault'] = true;
                                                  if (_selectedMedication != null &&
                                                      duration != null &&
                                                      frequency != null &&
                                                      strengthController.text != null) {
                                                    model.getBoxQuantity(
                                                        freq: frequency['parameterCode'],
                                                        duration: duration['id'],
                                                        itemCode: _selectedMedication!.itemId!,
                                                        strength: double.parse(strengthController.text));

                                                    return;
                                                  }
                                                });
                                              }),
                                          SizedBox(height: spaceBetweenTextFileds),
                                          PrescriptionTextFiled(
                                              isSubmitted: isSubmitted,
                                              hintText: TranslationBase.of(context).doseTime ?? "",
                                              elementError: doseTimeError ?? "",
                                              element: doseTime,
                                              elementList: model.medicationDoseTimeList,
                                              keyId: 'id',
                                              keyName: 'nameEn',
                                              okFunction: (selectedValue) {
                                                setState(() {
                                                  doseTime = selectedValue;
                                                });
                                              }),
                                          SizedBox(height: spaceBetweenTextFileds),
                                          if (model.patientAssessmentList.isNotEmpty)
                                            Container(
                                              height: screenSize.height * 0.070,
                                              width: double.infinity,
                                              color: Colors.white,
                                              child: Row(
                                                children: [
                                                  Container(
                                                    width: MediaQuery.of(context).size.width * 0.29,
                                                    child: TextField(
                                                      decoration: textFieldSelectorDecoration(
                                                          model.patientAssessmentList[0].icdCode10ID.toString(),
                                                          indication != null ? indication['name'] : null,
                                                          false),
                                                      enabled: true,
                                                      readOnly: true,
                                                    ),
                                                  ),
                                                  Container(
                                                    width: MediaQuery.of(context).size.width * 0.59,
                                                    color: Colors.white,
                                                    child: TextField(
                                                      maxLines: 5,
                                                      decoration: textFieldSelectorDecoration(
                                                          model.patientAssessmentList[0].asciiDesc.toString(),
                                                          indication != null ? indication['name'] : null,
                                                          false),
                                                      enabled: true,
                                                      readOnly: true,
                                                    ),
                                                  ),
                                                ],
                                              ),
                                            ),
                                          SizedBox(height: spaceBetweenTextFileds),
                                          Container(
                                            height: screenSize.height * 0.070,
                                            color: Colors.white,
                                            child: InkWell(
                                              onTap: () => selectDate(context, widget.model),
                                              child: TextField(
                                                decoration: textFieldSelectorDecoration(
                                                    TranslationBase.of(context).date ?? "",
                                                    selectedDate != null
                                                        ? "${AppDateUtils.convertStringToDateFormat(selectedDate.toString(), "yyyy-MM-dd")}"
                                                        : null,
                                                    true,
                                                    suffixIcon: Icon(
                                                      Icons.calendar_today,
                                                      color: Colors.black,
                                                    )),
                                                enabled: false,
                                              ),
                                            ),
                                          ),
                                          SizedBox(height: spaceBetweenTextFileds),
                                          PrescriptionTextFiled(
                                            isSubmitted: isSubmitted,
                                            element: duration,
                                            elementError: durationError ?? "",
                                            hintText: TranslationBase.of(context).duration ?? "",
                                            elementList: model.medicationDurationList,
                                            keyName: 'nameEn',
                                            keyId: 'id',
                                            okFunction: (selectedValue) {
                                              setState(() {
                                                duration = selectedValue;
                                                if (_selectedMedication != null &&
                                                    duration != null &&
                                                    frequency != null &&
                                                    strengthController.text != null) {
                                                  model.getBoxQuantity(
                                                    freq: frequency['parameterCode'],
                                                    duration: duration['id'],
                                                    itemCode: _selectedMedication!.itemId!,
                                                    strength: double.parse(strengthController.text),
                                                  );
                                                  box = model.boxQuintity;

                                                  return;
                                                }
                                              });
                                            },
                                          ),
                                          SizedBox(height: spaceBetweenTextFileds),
                                          Container(
                                            color: Colors.white,
                                            child: AppTextFieldCustom(
                                              hintText: "UOM",
                                              isTextFieldHasSuffix: false,
                                              dropDownText: uom != null ? uom : null,
                                              enabled: false,
                                            ),
                                          ),
                                          SizedBox(height: spaceBetweenTextFileds),
                                          Container(
                                            color: Colors.white,
                                            child: AppTextFieldCustom(
                                              hintText: TranslationBase.of(context).boxQuantity,
                                              isTextFieldHasSuffix: false,
                                              dropDownText: box != null ? model.boxQuintity.toString() : null,
                                              enabled: false,
                                            ),
                                          ),
                                          SizedBox(height: spaceBetweenTextFileds),
                                          Container(
                                            decoration: BoxDecoration(
                                                borderRadius: BorderRadius.all(Radius.circular(6.0)),
                                                border: Border.all(width: 1.0, color: HexColor("#CCCCCC"))),
                                            child: Stack(
                                              children: [
                                                TextFields(
                                                  maxLines: 6,
                                                  minLines: 4,
                                                  hintText: TranslationBase.of(context).instruction,
                                                  controller: instructionController,
                                                  //keyboardType: TextInputType.number,
                                                ),
                                                Positioned(
                                                  top: 0,
                                                  right: 15,
                                                  child: IconButton(
                                                    icon: Icon(
                                                      DoctorApp.speechtotext,
                                                      color: Colors.black,
                                                      size: 35,
                                                    ),
                                                    onPressed: () {
                                                      initSpeechState().then((value) => {onVoiceText()});
                                                    },
                                                  ),
                                                ),
                                              ],
                                            ),
                                          ),
                                          SizedBox(height: spaceBetweenTextFileds),
                                          Container(
                                            margin: EdgeInsets.all(SizeConfig.widthMultiplier * 5),
                                            child: Wrap(
                                              alignment: WrapAlignment.center,
                                              children: <Widget>[
                                                AppButton(
                                                  color: Color(0xff359846),
                                                  title: TranslationBase.of(context).addMedication,
                                                  fontWeight: FontWeight.w600,
                                                  onPressed: () async {
                                                    await locator<AnalyticsService>().logEvent(
                                                      eventCategory: "Add Prescription Form",
                                                      eventAction: "Add Prescription",
                                                    );
                                                    if (duration != null &&
                                                        doseTime != null &&
                                                        frequency != null &&
                                                        selectedDate != null &&
                                                        strengthController.text != "") {
                                                      if (_selectedMedication!.isNarcotic == true) {
                                                        DrAppToastMsg.showErrorToast(TranslationBase.of(context)
                                                            .narcoticMedicineCanOnlyBePrescribedFromVida);
                                                        // Navigator.pop(context);
                                                        return;
                                                      }

                                                      if (double.parse(strengthController.text) > 1000.0) {
                                                        DrAppToastMsg.showErrorToast(
                                                            "1000 is the MAX for the strength");
                                                        return;
                                                      }
                                                      if (double.parse(strengthController.text) < 0.0) {
                                                        DrAppToastMsg.showErrorToast("strength can't be zero");
                                                        return;
                                                      }

                                                      if (formKey.currentState!.validate()) {
                                                        Navigator.pop(context);
                                                        openDrugToDrug(model);
                                                        {
                                                          // postProcedure(
                                                          //   icdCode: model
                                                          //           .patientAssessmentList
                                                          //           .isNotEmpty
                                                          //       ? model
                                                          //               .patientAssessmentList[
                                                          //                   0]
                                                          //               .icdCode10ID
                                                          //               .isEmpty
                                                          //           ? "test"
                                                          //           : model
                                                          //               .patientAssessmentList[
                                                          //                   0]
                                                          //               .icdCode10ID
                                                          //               .toString()
                                                          //       : "test",
                                                          //   // icdCode: model
                                                          //   //     .patientAssessmentList
                                                          //   //     .map((value) => value
                                                          //   //         .icdCode10ID
                                                          //   //         .trim())
                                                          //   //     .toList()
                                                          //   //     .join(' '),
                                                          //   dose: strengthController
                                                          //       .text,
                                                          //   doseUnit: model
                                                          //               .itemMedicineListUnit
                                                          //               .length ==
                                                          //           1
                                                          //       ? model
                                                          //           .itemMedicineListUnit[
                                                          //               0][
                                                          //               'parameterCode']
                                                          //           .toString()
                                                          //       : units['parameterCode']
                                                          //           .toString(),
                                                          //   patient: widget.patient,
                                                          //   doseTimeIn:
                                                          //       doseTime['id']
                                                          //           .toString(),
                                                          //   model: widget.model,
                                                          //   duration: duration['id']
                                                          //       .toString(),
                                                          //   frequency: model
                                                          //               .itemMedicineList
                                                          //               .length ==
                                                          //           1
                                                          //       ? model
                                                          //           .itemMedicineList[
                                                          //               0][
                                                          //               'parameterCode']
                                                          //           .toString()
                                                          //       : frequency[
                                                          //               'parameterCode']
                                                          //           .toString(),
                                                          //   route: model.itemMedicineListRoute
                                                          //               .length ==
                                                          //           1
                                                          //       ? model
                                                          //           .itemMedicineListRoute[
                                                          //               0][
                                                          //               'parameterCode']
                                                          //           .toString()
                                                          //       : route['parameterCode']
                                                          //           .toString(),
                                                          //   drugId:
                                                          //       _selectedMedication
                                                          //           .itemId
                                                          //           .toString(),
                                                          //   strength:
                                                          //       strengthController
                                                          //           .text,
                                                          //   indication:
                                                          //       indicationController
                                                          //           .text,
                                                          //   instruction:
                                                          //       instructionController
                                                          //           .text,
                                                          //   doseTime: selectedDate,
                                                          // );
                                                        }
                                                      }
                                                    } else {
                                                      setState(() {
                                                        isSubmitted = true;
                                                        if (duration == null) {
                                                          durationError = TranslationBase.of(context).fieldRequired;
                                                        } else {
                                                          durationError = "";
                                                        }
                                                        if (doseTime == null) {
                                                          doseTimeError = TranslationBase.of(context).fieldRequired;
                                                        } else {
                                                          doseTimeError = "";
                                                        }
                                                        if (route == null) {
                                                          routeError = TranslationBase.of(context).fieldRequired;
                                                        } else {
                                                          routeError = "";
                                                        }
                                                        if (frequency == null) {
                                                          frequencyError = TranslationBase.of(context).fieldRequired;
                                                        } else {
                                                          frequencyError = "";
                                                        }
                                                        if (units == null) {
                                                          unitError = TranslationBase.of(context).fieldRequired;
                                                        } else {
                                                          unitError = "";
                                                        }
                                                        if (strengthController.text == "") {
                                                          strengthError = TranslationBase.of(context).fieldRequired;
                                                        } else {
                                                          strengthError = "";
                                                        }
                                                      });
                                                    }

                                                    formKey.currentState!.save();
                                                  },
                                                ),
                                              ],
                                            ),
                                          ),
                                        ],
                                      ),
                                    ),
                                  ),
                                ],
                              ),
                            ),
                          ),
                        ],
                      ),
                    ),
                  ),
                );
              }),
        ),
      ),
    );
  }

  selectDate(BuildContext context, PrescriptionViewModel model) async {
    Helpers.hideKeyboard(context);
    DateTime selectedDate;
    selectedDate = DateTime.now();
    final DateTime? picked = await showDatePicker(
      context: context,
      initialDate: selectedDate,
      firstDate: DateTime.now(),
      lastDate: DateTime(2040),
      initialEntryMode: DatePickerEntryMode.calendar,
    );
    if (picked != null && picked != selectedDate) {
      setState(() {
        this.selectedDate = picked;
      });
    }
  }

  InputDecoration textFieldSelectorDecoration(String? hintText, String? selectedText, bool isDropDown,
      {Icon? suffixIcon}) {
    return InputDecoration(
      focusedBorder: OutlineInputBorder(
        borderSide: BorderSide(color: Color(0xFFCCCCCC), width: 2.0),
        borderRadius: BorderRadius.circular(8),
      ),
      enabledBorder: OutlineInputBorder(
        borderSide: BorderSide(color: Color(0xFFEFEFEF), width: 2.0),
        borderRadius: BorderRadius.circular(8),
      ),
      disabledBorder: OutlineInputBorder(
        borderSide: BorderSide(color: Color(0xFFEFEFEF), width: 2.0),
        borderRadius: BorderRadius.circular(8),
      ),
      hintText: selectedText != null ? selectedText : hintText,
      suffixIcon: isDropDown
          ? suffixIcon != null
              ? suffixIcon
              : Icon(
                  Icons.keyboard_arrow_down_sharp,
                  color: Color(0xff2E303A),
                )
          : null,
      hintStyle: TextStyle(
        fontSize: 13,
        color: Color(0xff2E303A),
        fontFamily: 'Poppins',
        fontWeight: FontWeight.w600,
      ),
      labelText: selectedText != null ? '$hintText\n$selectedText' : null,
      labelStyle: TextStyle(
        fontSize: 13,
        color: Color(0xff2E303A),
        fontFamily: 'Poppins',
        fontWeight: FontWeight.w600,
      ),
    );
  }

  openDrugToDrug(model) {
    showModalBottomSheet(
        context: context,
        builder: (context) {
          return Container(
            height: SizeConfig.realScreenHeight * .8,
            width: SizeConfig.realScreenWidth,
            child: SingleChildScrollView(
                child: Column(
              // mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: [
                DrugToDrug(widget.patient, getPriscriptionforDrug(widget.prescriptionList, model),
                    model.patientAssessmentList),
                Container(
                    margin: EdgeInsets.all(SizeConfig.widthMultiplier * 3),
                    child: AppButton(
                      title: TranslationBase.of(context).addMedication,
                      onPressed: () {
                        Navigator.pop(context);

                        postPrescription(
                          icdCode: model.patientAssessmentList.isNotEmpty
                              ? model.patientAssessmentList[0].icdCode10ID.isEmpty
                                  ? "test"
                                  : model.patientAssessmentList[0].icdCode10ID.toString()
                              : "test",
                          dose: strengthController.text,
                          doseUnit: model.itemMedicineListUnit.length == 1
                              ? model.itemMedicineListUnit[0]['parameterCode'].toString()
                              : units['parameterCode'].toString(),
                          patient: widget.patient,
                          doseTimeIn: doseTime['id'].toString(),
                          model: widget.model,
                          duration: duration['id'].toString(),
                          frequency: model.itemMedicineList.length == 1
                              ? model.itemMedicineList[0]['parameterCode'].toString()
                              : frequency['parameterCode'].toString(),
                          route: model.itemMedicineListRoute.length == 1
                              ? model.itemMedicineListRoute[0]['parameterCode'].toString()
                              : route['parameterCode'].toString(),
                          drugId: _selectedMedication!.itemId.toString(),
                          strength: strengthController.text,
                          indication: indicationController.text,
                          instruction: instructionController.text,
                          doseTime: selectedDate,
                        );
                      },
                    ))
              ],
            )),

            //],
            //)
          );
        });
  }

  getPriscriptionforDrug(List<PrescriptionModel> prescriptionList, MedicineViewModel model) {
    var prescriptionDetails = [];
    if (prescriptionList.length > 0) {
      prescriptionList[0].entityList!.forEach((element) {
        if (element.mediSpanGPICode != null) {
          prescriptionDetails.add({
            'DrugId': element.mediSpanGPICode,
            'DrugName': element.medicationName,
            'Dose': element.doseDailyQuantity,
            'DoseType': element.doseDailyUnitID,
            'Unit': element.uom,
            'FrequencyType': element.frequencyID,
            'Duration': element.doseDurationDays,
            'RouteID': element.routeID,
            'IsScreen': element.isSIG
          });
        }
      });
    }
    if (_selectedMedication!.mediSpanGPICode != null) {
      prescriptionDetails.add({
        'DrugId': _selectedMedication!.mediSpanGPICode,
        'DrugName': _selectedMedication!.description,
        'Dose': strengthController.text,
        'DoseType': model.itemMedicineListUnit.length == 1
            ? model.itemMedicineListUnit[0]['parameterCode'].toString()
            : units['parameterCode'].toString(),
        'Unit': model.itemMedicineListUnit.length == 1
            ? model.itemMedicineListUnit[0]['description']
            : units['description'],
        'FrequencyType': model.itemMedicineList.length == 1
            ? model.itemMedicineList[0]['parameterCode'].toString()
            : frequency['parameterCode'].toString(),
        'Duration': duration['id'].toString(),
        'RouteID': model.itemMedicineListRoute.length == 1
            ? model.itemMedicineListRoute[0]['parameterCode'].toString()
            : route['parameterCode'].toString(),
        'IsScreen': true
      });
    }
    return prescriptionDetails;
  }

  searchMedicine(context, MedicineViewModel model) async {
    FocusScope.of(context).unfocus();
    if (myController.text.length < 3) {
      Helpers.showErrorToast(TranslationBase.of(context).moreThan3Letter);
      return;
    }
    await model.getMedicationList(drug: myController.text);
  }
}
