import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/config/shared_pref_kay.dart';
import 'package:doctor_app_flutter/core/enum/viewstate.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/GetGetProgressNoteReqModel.dart';
import 'package:doctor_app_flutter/models/SOAP/GetGetProgressNoteResModel.dart';
import 'package:doctor_app_flutter/models/SOAP/post_progress_note_request_model.dart';
import 'package:doctor_app_flutter/models/doctor/doctor_profile_model.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/util/helpers.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_buttons_widget.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/expandable-widget-header-body.dart';
import 'package:eva_icons_flutter/eva_icons_flutter.dart';
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';

class UpdatePlanPage extends StatefulWidget {
  final Function changePageViewIndex;
  final PatiantInformtion patientInfo;
  final Function changeLoadingState;
   GetPatientProgressNoteResModel patientProgressNote;

  UpdatePlanPage(
      {Key key,
      this.changePageViewIndex,
      this.patientInfo,
      this.changeLoadingState,
      this.patientProgressNote});

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

class _UpdatePlanPageState extends State<UpdatePlanPage> {
  bool isProgressNoteExpand = false;


  TextEditingController progressNoteController =
      TextEditingController(text: null);

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

  @override
  Widget build(BuildContext context) {
    return BaseView<SOAPViewModel>(
      onModelReady: (model) async {
        GetGetProgressNoteReqModel getGetProgressNoteReqModel =
            GetGetProgressNoteReqModel(
                appointmentNo: widget.patientInfo.appointmentNo,
                patientMRN: widget.patientInfo.patientMRN,
                episodeID: widget.patientInfo.episodeNo.toString(), editedBy: '', doctorID: '');
        await model.getPatientProgressNote(getGetProgressNoteReqModel);

        if (model.patientProgressNoteList.isNotEmpty) {
          progressNoteController.text = helpers
              .parseHtmlString(model.patientProgressNoteList[0].planNote);
           widget.patientProgressNote.planNote = progressNoteController.text;
           widget.patientProgressNote.createdByName = model.patientProgressNoteList[0].createdByName;
           widget.patientProgressNote.createdOn = model.patientProgressNoteList[0].createdOn;
           widget.patientProgressNote.editedOn = model.patientProgressNoteList[0].editedOn;
           widget.patientProgressNote.editedByName = model.patientProgressNoteList[0].editedByName;

        }
        widget.changeLoadingState(false);
      },
      builder: (_, model, w) => AppScaffold(
        // baseViewModel: model,
        isShowAppBar: false,
        body: SingleChildScrollView(
          physics: ScrollPhysics(),
          child: Center(
            child: FractionallySizedBox(
              widthFactor: 0.9,
              child: Column(
                mainAxisAlignment: MainAxisAlignment.start,
                children: [
                  SizedBox(
                    height: 30,
                  ),
                  HeaderBodyExpandableNotifier(
                    headerWidget: Row(
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
                      children: [
                        Row(
                          children: [
                            Texts(TranslationBase
                                .of(context)
                                .progressNoteSOAP,
                                variant: isProgressNoteExpand ? "bodyText" : '',
                                bold: isProgressNoteExpand ? true : false,
                                color: Colors.black),
                            Icon(
                              FontAwesomeIcons.asterisk,
                              color: AppGlobal.appPrimaryColor,
                              size: 12,
                            )
                          ],
                        ),
                        InkWell(
                            onTap: () {
                              setState(() {
                                isProgressNoteExpand = !isProgressNoteExpand;
                              });
                            },
                            child: Icon(isProgressNoteExpand
                                ? EvaIcons.minus
                                : EvaIcons.plus))
                      ],
                    ),
                    bodyWidget: Column(children: [
                      SizedBox(
                        height: 20,
                      ),
                      Column(
                        children: [
                          if(widget.patientProgressNote.planNote == null)
                            Container(
                              margin:
                              EdgeInsets.only(left: 10, right: 10, top: 15),
                              child: TextFields(

                                  hintText: TranslationBase
                                      .of(context)
                                      .addProgressNote,
                                  fontSize: 13.5,
                                  onTapTextFields: () {
                                    openProgressNote(context);
                                  },
                                  readOnly: true,
                                  // hintColor: Colors.black,
                                  suffixIcon: EvaIcons.plusCircleOutline,
                                  suffixIconColor: AppGlobal.appPrimaryColor,
                                  fontWeight: FontWeight.w600,
                                  // controller: messageController,
                                validator: (value) {
                                  if (value == null)
                                    return TranslationBase.of(context)
                                        .emptyMessage;
                                  else
                                    return null;
                                }),
                          ),
                          SizedBox(
                            height: 20,
                          ),
                          if ( widget.patientProgressNote.planNote != null)
                            Container(
                              margin:
                                  EdgeInsets.only(left: 5, right: 5, top: 15),
                              child: Row(
                                mainAxisAlignment:
                                    MainAxisAlignment.spaceBetween,
                                crossAxisAlignment: CrossAxisAlignment.start,
                                children: [
                                  Column(
                                    mainAxisAlignment: MainAxisAlignment.start,
                                    children: [
                                      Column(
                                        mainAxisAlignment:
                                            MainAxisAlignment.start,
                                        crossAxisAlignment:
                                            CrossAxisAlignment.start,
                                        children: [
                                          AppText(

                                            widget.patientProgressNote.createdOn !=null?DateTime.parse(widget.patientProgressNote.createdOn).day.toString():DateTime.now().day.toString(),
                                            fontWeight: FontWeight
                                                .bold,
                                            fontSize: 16,
                                          ),
                                          AppText(
                                            Helpers.getMonth(widget.patientProgressNote.createdOn !=null?(DateTime.parse(widget.patientProgressNote.createdOn).month):DateTime.now().month).toUpperCase(),
                                            fontSize: 10,
                                            color: Colors.grey,
                                          ),
                                        ],
                                      )
                                    ],
                                  ),
                                  Column(
                                    crossAxisAlignment:
                                        CrossAxisAlignment.start,
                                    children: [
                                      Row(
                                        mainAxisAlignment:
                                            MainAxisAlignment.start,
                                        children: [
                                          SizedBox(
                                            height: 6,
                                          ),
                                          Padding(
                                            padding: const EdgeInsets.all(0.0),
                                            child: Container(
                                              width: MediaQuery.of(context)
                                                      .size
                                                      .width *
                                                  0.6,
                                              child: AppText(
                                                progressNoteController.text,
                                                fontSize: 10,
                                                color: Colors.grey,
                                              ),
                                            ),
                                          ),
                                        ],
                                      ),
                                      SizedBox(
                                        height: 8,
                                      ),
                                      if(widget.patientProgressNote.createdByName !=null)
                                      Row(
                                        mainAxisAlignment:
                                            MainAxisAlignment.start,
                                        children: [
                                          AppText(
                                            TranslationBase.of(context).createdBy,
                                            fontWeight: FontWeight.bold,
                                            fontSize: 16,
                                          ),
                                          AppText(
                                            widget.patientProgressNote.createdByName??"",
                                            fontSize: 10,
                                            color: Colors.grey,
                                          ),
                                        ],
                                      ),
                                      if(widget.patientProgressNote.editedByName !=null)
                                      Row(
                                        mainAxisAlignment:
                                            MainAxisAlignment.start,
                                        children: [
                                          AppText(
                                          TranslationBase.of(context).editedBy,
                                            fontWeight: FontWeight.bold,
                                            fontSize: 16,
                                          ),
                                          AppText(
                                            widget.patientProgressNote.editedByName??"",
                                            fontSize: 10,
                                            color: Colors.grey,
                                          ),
                                        ],
                                      ),
                                    ],
                                  ),
                                  Column(
                                    children: [
                                      InkWell(
                                        onTap: () {
                                          openProgressNote(context);
                                        },
                                        child: Icon(EvaIcons.edit2Outline),
                                      )
                                    ],
                                  ),
                                ],
                              ),
                            )
                        ],
                      )
                    ]),
                    isExpand: isProgressNoteExpand,
                  ),
                  DividerWithSpacesAround(
                    height: 30,
                  ),
                  AppButton(
                    title: TranslationBase.of(context).next,
                    loading: model.state == ViewState.BusyLocal,
                    onPressed: () {
                      submitPlan(model);
                      // widget.changePageViewIndex(2);
                    },
                  ),
                  SizedBox(
                    height: 30,
                  ),
                ],
              ),
            ),
          ),
        ),
      ),
    );
  }

  submitPlan(SOAPViewModel model)  async {
    if (progressNoteController.text.isNotEmpty) {
      PostProgressNoteRequestModel postProgressNoteRequestModel = new PostProgressNoteRequestModel(
          patientMRN: widget.patientInfo.patientMRN,
          episodeId: widget.patientInfo.episodeNo,
          appointmentNo: widget.patientInfo.appointmentNo,
          planNote: widget.patientProgressNote.planNote, doctorID: '', editedBy: '');

      if(model.patientProgressNoteList.isEmpty){
        await model.postProgressNote(postProgressNoteRequestModel);

      }else {
        Map profile = await sharedPref.getObj(DOCTOR_PROFILE);

        DoctorProfileModel doctorProfile = DoctorProfileModel.fromJson(profile);
        postProgressNoteRequestModel.editedBy =doctorProfile.doctorID;
        await model.patchProgressNote(postProgressNoteRequestModel);

      }

      if (model.state == ViewState.ErrorLocal) {
        helpers.showErrorToast(model.error);
      } else {
        Navigator.of(context).pop();
      }
    } else {
      helpers.showErrorToast(TranslationBase.of(context).progressNoteErrorMsg);
    }
  }

  openProgressNote(BuildContext context) {
    showModalBottomSheet(
        backgroundColor: Colors.white,
        isScrollControlled: true,
        context: context,
        builder: (context) {
          return FractionallySizedBox(
            heightFactor: 0.6,
            child: Container(
                child: FractionallySizedBox(
                  widthFactor: 0.9,
                  child: ListView(
                      // crossAxisAlignment: CrossAxisAlignment.start,
                      children: [
                        SizedBox(
                          height: 16,
                        ),
                        AppText(
                         TranslationBase.of(context).addProgressNote,
                          fontWeight: FontWeight.bold,
                          fontSize: 16,
                        ),
                        SizedBox(
                          height: 10,
                        ),
                        Container(
                          margin: EdgeInsets.only(left: 0, right: 0, top: 15),

                          child: TextFields(
                              hasLabelText: progressNoteController.text != ''?true:false,
                              showLabelText: true,
                              hintText: TranslationBase.of(context).addProgressNote,
                              fontSize: 13.5,
                              // hintColor: Colors.black,
                              fontWeight: FontWeight.w600,
                              maxLines: 16,
                              minLines: 8,
                              controller: progressNoteController,
                              validator: (value) {
                                if (value == null)
                                  return TranslationBase
                                      .of(context)
                                      .emptyMessage;
                                else
                                  return null;
                              }),
                        ),SizedBox(
                          height: 10,
                        ),
                        AppButton(
                          title: TranslationBase.of(context).add.toUpperCase(),
                          onPressed: () async{
                            Map profile = await sharedPref.getObj(DOCTOR_PROFILE);

                            DoctorProfileModel doctorProfile = DoctorProfileModel.fromJson(profile);
                            widget.patientProgressNote.createdByName = widget.patientProgressNote.createdByName??doctorProfile.doctorName;
                            widget.patientProgressNote.editedByName=doctorProfile.doctorName;
                            widget.patientProgressNote.createdOn= DateTime.now().toString() ;
                            widget.patientProgressNote.planNote = progressNoteController.text;
                            setState(() {
                              print(progressNoteController.text);
                            });
                            Navigator.of(context).pop();
                          },
                        ),
                      ]),
                )),
          );
        });
  }
}
