import 'package:doctor_app_flutter/core/model/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/core/viewModel/medical_file_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/date-utils.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/patients/profile/app_bar/patient-profile-app-bar.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/expandable-widget-header-body.dart';
import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart';
import 'package:eva_icons_flutter/eva_icons_flutter.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

import '../../widgets/shared/errors/error_message.dart';

class MedicalFileDetails extends StatefulWidget {
  String? age;
  String? firstName;
  String? lastName;
  String? gender;
  int? encounterNumber;
  int? pp;
  PatiantInformtion? patient;
  String? clinicName;
  String? episode;
  String? doctorName;
  String? vistDate;
  String? doctorImage;

  MedicalFileDetails(
      {this.age, this.firstName, this.lastName, this.gender, this.encounterNumber, this.pp, this.patient, this.doctorName, this.vistDate, this.clinicName, this.episode, this.doctorImage});

  @override
  _MedicalFileDetailsState createState() => _MedicalFileDetailsState(
        firstName: firstName!,
        age: age!,
        lastName: lastName!,
        gender: gender!,
        encounterNumber: encounterNumber!,
        pp: pp!,
        patient: patient!,
        clinicName: clinicName!,
        doctorName: doctorName!,
        episode: episode!,
        vistDate: vistDate!,
        doctorImage: doctorImage!,
      );
}

class _MedicalFileDetailsState extends State<MedicalFileDetails> {
  int? encounterNumber;
  String? age;
  String? firstName;
  String? lastName;
  String? gender;
  int? pp;
  PatiantInformtion? patient;
  String? clinicName;
  String? episode;
  String? doctorName;
  String? vistDate;
  String? doctorImage;

  _MedicalFileDetailsState(
      {this.age, this.firstName, this.lastName, this.gender, this.encounterNumber, this.pp, this.patient, this.doctorName, this.vistDate, this.clinicName, this.episode, this.doctorImage});

  bool isPhysicalExam = true;
  bool isProcedureExpand = true;
  bool isHistoryExpand = true;
  bool isAssessmentExpand = true;

  @override
  Widget build(BuildContext context) {
    ProjectViewModel projectViewModel = Provider.of(context);
    return BaseView<MedicalFileViewModel>(
      onModelReady: (model) async {
        if (model.medicalFileList.length == 0) {
          model.getMedicalFile(mrn: pp!);
        }
      },
      builder: (BuildContext context, MedicalFileViewModel model, Widget? child) =>
          // AppScaffold(
        // isShowAppBar: false,
        // appBarTitle: TranslationBase.of(context).medicalReport.toUpperCase(),
        // body:
        Material(
          child: Column(
            children: [
              PatientProfileAppBar(
                patient!,
                doctorName: doctorName!,
                profileUrl: doctorImage!,
                clinic: clinicName!,
                isPrescriptions: true,
                isMedicalFile: true,
                episode: episode!,
                visitDate: '${AppDateUtils.getDayMonthYearDateFormatted(AppDateUtils.getDateTimeFromServerFormat(
                  vistDate!,
                ), isArabic: projectViewModel.isArabic)}',
                isAppointmentHeader: true,
              ),
              Expanded(
                child: SingleChildScrollView(
                  child: Column(
                    children: [
                      model.medicalFileList.length != 0 && model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations!.length != 0
                          ? Padding(
                              padding: EdgeInsets.all(10.0),
                              child: Container(
                                child: Column(
                                  children: [
                                    SizedBox(height: 25.0),
                                    if (model.medicalFileList.length != 0 && model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations!.length != 0)
                                      Container(
                                        width: double.infinity,
                                        margin: EdgeInsets.only(top: 10, left: 10, right: 10),
                                        padding: EdgeInsets.all(8.0),
                                        decoration: BoxDecoration(
                                          color: Colors.white,
                                          borderRadius: BorderRadius.all(
                                            Radius.circular(10.0),
                                          ),
                                          border: Border.all(color: Colors.grey[200]!, width: 0.5),
                                        ),
                                        child: Padding(
                                          padding: const EdgeInsets.all(15.0),
                                          child: HeaderBodyExpandableNotifier(
                                            headerWidget: Row(
                                              mainAxisAlignment: MainAxisAlignment.spaceBetween,
                                              children: [
                                                Row(
                                                  children: [
                                                    AppText(TranslationBase.of(context).historyOfPresentIllness.toUpperCase(),
                                                        variant: isHistoryExpand ? "bodyText" : '', bold: isHistoryExpand ? true : true, color: Colors.black),
                                                  ],
                                                ),
                                                InkWell(
                                                    onTap: () {
                                                      setState(() {
                                                        isHistoryExpand = !isHistoryExpand;
                                                      });
                                                    },
                                                    child: Icon(isHistoryExpand ? EvaIcons.arrowUp : EvaIcons.arrowDown))
                                              ],
                                            ),
                                            bodyWidget: ListView.builder(
                                                physics: NeverScrollableScrollPhysics(),
                                                scrollDirection: Axis.vertical,
                                                shrinkWrap: true,
                                                itemCount: model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstCheifComplaint!.length,
                                                itemBuilder: (BuildContext ctxt, int index) {
                                                  return Padding(
                                                    padding: EdgeInsets.all(8.0),
                                                    child: Container(
                                                      child: Column(
                                                        mainAxisAlignment: MainAxisAlignment.center,
                                                        children: [
                                                          Row(
                                                            children: [
                                                              Expanded(
                                                                child: AppText(
                                                                  model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstCheifComplaint![index].hOPI!
                                                                      .trim(),
                                                                ),
                                                              ),
                                                              SizedBox(width: 35.0),
                                                            ],
                                                          ),
                                                        ],
                                                      ),
                                                    ),
                                                  );
                                                }),
                                            isExpand: isHistoryExpand,
                                          ),
                                        ),
                                      ),
                                    // SizedBox(
                                    //   height: 30,
                                    // ),
                
                                    SizedBox(
                                      height: 30,
                                    ),
                                    if (model.medicalFileList.length != 0 && model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations!.length != 0)
                                      Container(
                                        width: double.infinity,
                                        margin: EdgeInsets.only(top: 10, left: 10, right: 10),
                                        padding: EdgeInsets.all(8.0),
                                        decoration: BoxDecoration(
                                          color: Colors.white,
                                          borderRadius: BorderRadius.all(
                                            Radius.circular(10.0),
                                          ),
                                          border: Border.all(color: Colors.grey[200]!, width: 0.5),
                                        ),
                                        child: Padding(
                                          padding: const EdgeInsets.all(15.0),
                                          child: HeaderBodyExpandableNotifier(
                                            headerWidget: Row(
                                              mainAxisAlignment: MainAxisAlignment.spaceBetween,
                                              children: [
                                                Row(
                                                  children: [
                                                    AppText(TranslationBase.of(context).assessment.toUpperCase(),
                                                        variant: isAssessmentExpand ? "bodyText" : '', bold: isAssessmentExpand ? true : true, color: Colors.black),
                                                  ],
                                                ),
                                                InkWell(
                                                    onTap: () {
                                                      setState(() {
                                                        isAssessmentExpand = !isAssessmentExpand;
                                                      });
                                                    },
                                                    child: Icon(isAssessmentExpand ? EvaIcons.arrowUp : EvaIcons.arrowDown))
                                              ],
                                            ),
                                            bodyWidget: ListView.builder(
                                                physics: NeverScrollableScrollPhysics(),
                                                scrollDirection: Axis.vertical,
                                                shrinkWrap: true,
                                                itemCount: model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstAssessments!.length,
                                                itemBuilder: (BuildContext ctxt, int index) {
                                                  return Padding(
                                                    padding: EdgeInsets.all(8.0),
                                                    child: Container(
                                                      child: Column(
                                                        mainAxisAlignment: MainAxisAlignment.center,
                                                        children: [
                                                          Row(
                                                            children: [
                                                              AppText(
                                                                'ICD: ',
                                                                fontSize: 13.0,
                                                              ),
                                                              AppText(
                                                                model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstAssessments![index].iCD10!
                                                                    .trim(),
                                                                fontSize: 13.5,
                                                                fontWeight: FontWeight.w700,
                                                              ),
                                                              SizedBox(width: 15.0),
                                                            ],
                                                          ),
                                                          Row(
                                                            children: [
                                                              AppText(
                                                                TranslationBase.of(context).condition + ": ",
                                                                fontSize: 12.5,
                                                              ),
                                                              Expanded(
                                                                child: AppText(
                                                                  model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstAssessments![index]
                                                                      .condition!
                                                                      .trim(),
                                                                  fontSize: 13.0,
                                                                  fontWeight: FontWeight.w700,
                                                                ),
                                                              ),
                                                            ],
                                                          ),
                                                          Row(
                                                            children: [
                                                              Expanded(
                                                                child: AppText(
                                                                  model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstAssessments![index]
                                                                      .description!,
                                                                  fontWeight: FontWeight.w700,
                                                                  fontSize: 15.0,
                                                                ),
                                                              )
                                                            ],
                                                          ),
                                                          Row(
                                                            children: [
                                                              AppText(
                                                                TranslationBase.of(context).type + ": ",
                                                                fontSize: 15.5,
                                                              ),
                                                              Expanded(
                                                                child: AppText(
                                                                  model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstAssessments![index].type!,
                                                                  fontSize: 16.0,
                                                                  fontWeight: FontWeight.w700,
                                                                ),
                                                              ),
                                                            ],
                                                          ),
                                                          SizedBox(
                                                            height: 15.0,
                                                          ),
                                                          AppText(
                                                            model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstAssessments![index].remarks??""
                                                                .trim(),
                                                          ),
                                                          Divider(
                                                            height: 1,
                                                            color: Colors.grey,
                                                            thickness: 1.0,
                                                          ),
                                                          SizedBox(
                                                            height: 8.0,
                                                          ),
                                                        ],
                                                      ),
                                                    ),
                                                  );
                                                }),
                                            isExpand: isAssessmentExpand,
                                          ),
                                        ),
                                      ),
                
                                    SizedBox(
                                      height: 30,
                                    ),
                                    if (model.medicalFileList.length != 0 && model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations!.length != 0)
                                      Container(
                                        width: double.infinity,
                                        margin: EdgeInsets.only(top: 10, left: 10, right: 10),
                                        padding: EdgeInsets.all(8.0),
                                        decoration: BoxDecoration(
                                          color: Colors.white,
                                          borderRadius: BorderRadius.all(
                                            Radius.circular(10.0),
                                          ),
                                          border: Border.all(color: Colors.grey[200]!, width: 0.5),
                                        ),
                                        child: Padding(
                                          padding: const EdgeInsets.all(15.0),
                                          child: HeaderBodyExpandableNotifier(
                                            headerWidget: Row(
                                              mainAxisAlignment: MainAxisAlignment.spaceBetween,
                                              children: [
                                                Row(
                                                  children: [
                                                    AppText(TranslationBase.of(context).test.toUpperCase(),
                                                        variant: isProcedureExpand ? "bodyText" : '', bold: isProcedureExpand ? true : true, color: Colors.black),
                                                  ],
                                                ),
                                                InkWell(
                                                    onTap: () {
                                                      setState(() {
                                                        isProcedureExpand = !isProcedureExpand;
                                                      });
                                                    },
                                                    child: Icon(isProcedureExpand ? EvaIcons.arrowUp : EvaIcons.arrowDown))
                                              ],
                                            ),
                                            bodyWidget: ListView.builder(
                                                physics: NeverScrollableScrollPhysics(),
                                                scrollDirection: Axis.vertical,
                                                shrinkWrap: true,
                                                itemCount: model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstProcedure!.length,
                                                itemBuilder: (BuildContext ctxt, int index) {
                                                  return Padding(
                                                    padding: EdgeInsets.all(8.0),
                                                    child: Container(
                                                      child: Column(
                                                        mainAxisAlignment: MainAxisAlignment.center,
                                                        children: [
                                                          Row(
                                                            children: [
                                                              Column(
                                                                children: [
                                                                  AppText(
                                                                    'Procedure ID: ',
                                                                  ),
                                                                  AppText(
                                                                    model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstProcedure![index]
                                                                        .procedureId!
                                                                        .trim(),
                                                                    fontSize: 13.5,
                                                                    fontWeight: FontWeight.w700,
                                                                  ),
                                                                ],
                                                              ),
                                                              SizedBox(width: 35.0),
                                                              Column(
                                                                children: [
                                                                  AppText(
                                                                    TranslationBase.of(context).orderDate + ": ",
                                                                  ),
                                                                  AppText(
                                                                    AppDateUtils.getDateFormatted(DateTime.parse(
                                                                      model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstProcedure![index]
                                                                          .orderDate!
                                                                          .trim(),
                                                                    )),
                                                                    fontSize: 13.5,
                                                                    fontWeight: FontWeight.w700,
                                                                  ),
                                                                ],
                                                              ),
                                                            ],
                                                          ),
                                                          SizedBox(
                                                            height: 20.0,
                                                          ),
                                                          Row(
                                                            children: [
                                                              Expanded(
                                                                child: AppText(
                                                                  model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstProcedure![index].procName!,
                                                                  fontWeight: FontWeight.w700,
                                                                ),
                                                              )
                                                            ],
                                                          ),
                                                          Row(
                                                            children: [
                                                              AppText(
                                                                'CPT Code : ',
                                                              ),
                                                                if(Utils.isVidaPlusProject(
                                                              projectViewModel,
                                                                model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstProcedure![index].projectID!,
                                                              ))
                                                              AppText(
                                                                model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstProcedure![index].cptCode
                                                                    .toString(),
                                                                fontWeight: FontWeight.w700,
                                                              )
                                                              else
                                                                  AppText(
                                                                    model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstProcedure![index].patientID
                                                                        .toString(),
                                                                    fontWeight: FontWeight.w700,
                                                                  )
                                                            ],
                                                          ),
                                                          SizedBox(
                                                            height: 15.0,
                                                          ),
                                                          Divider(
                                                            height: 1,
                                                            color: Colors.grey,
                                                            thickness: 1.0,
                                                          ),
                                                          SizedBox(
                                                            height: 8.0,
                                                          ),
                                                        ],
                                                      ),
                                                    ),
                                                  );
                                                }),
                                            isExpand: isProcedureExpand,
                                          ),
                                        ),
                                      ),
                
                                    SizedBox(
                                      height: 30,
                                    ),
                                    if (model.medicalFileList.length != 0 && model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations!.length != 0)
                                      Container(
                                        width: double.infinity,
                                        margin: EdgeInsets.only(top: 10, left: 10, right: 10),
                                        padding: EdgeInsets.all(8.0),
                                        decoration: BoxDecoration(
                                          color: Colors.white,
                                          borderRadius: BorderRadius.all(
                                            Radius.circular(10.0),
                                          ),
                                          border: Border.all(color: Colors.grey[200]!, width: 0.5),
                                        ),
                                        child: Padding(
                                          padding: const EdgeInsets.all(15.0),
                                          child: HeaderBodyExpandableNotifier(
                                            headerWidget: Row(
                                              mainAxisAlignment: MainAxisAlignment.spaceBetween,
                                              children: [
                                                Row(
                                                  children: [
                                                    AppText(TranslationBase.of(context).physicalSystemExamination.toUpperCase(),
                                                        variant: isPhysicalExam ? "bodyText" : '', bold: isPhysicalExam ? true : true, color: Colors.black),
                                                  ],
                                                ),
                                                InkWell(
                                                    onTap: () {
                                                      setState(() {
                                                        isPhysicalExam = !isPhysicalExam;
                                                      });
                                                    },
                                                    child: Icon(isPhysicalExam ? EvaIcons.arrowUp : EvaIcons.arrowDown))
                                              ],
                                            ),
                                            bodyWidget: ListView.builder(
                                                physics: NeverScrollableScrollPhysics(),
                                                scrollDirection: Axis.vertical,
                                                shrinkWrap: true,
                                                itemCount: model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstPhysicalExam!.length,
                                                itemBuilder: (BuildContext ctxt, int index) {
                                                  return Padding(
                                                    padding: EdgeInsets.all(8.0),
                                                    child: Container(
                                                      child: Column(
                                                        children: [
                                                          Row(
                                                            children: [
                                                              AppText(TranslationBase.of(context).examType + ": "),
                                                              AppText(
                                                                model
                                                                    .medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstPhysicalExam![index].examDesc!,
                                                                fontWeight: FontWeight.w700,
                                                              ),
                                                            ],
                                                          ),
                                                          // Row(
                                                          //   children: [
                                                          //     AppText(
                                                          //       model
                                                          //           .medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstPhysicalExam![index].examDesc!,
                                                          //       fontWeight: FontWeight.w700,
                                                          //     )
                                                          //   ],
                                                          // ),
                                                          Row(
                                                            children: [
                                                              AppText(TranslationBase.of(context).abnormal + ": "),
                                                              AppText(
                                                                model
                                                                    .medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstPhysicalExam![index].abnormal!,
                                                                fontWeight: FontWeight.w700,
                                                              ),
                                                            ],
                                                          ),
                                                          SizedBox(
                                                            height: 15.0,
                                                          ),
                                                          AppText(
                                                            model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstPhysicalExam![index].remarks!,
                                                          ),
                                                          Divider(
                                                            height: 1,
                                                            color: Colors.grey,
                                                            thickness: 1.0,
                                                          ),
                                                          SizedBox(
                                                            height: 8.0,
                                                          ),
                                                        ],
                                                      ),
                                                    ),
                                                  );
                                                }),
                                            isExpand: isPhysicalExam,
                                          ),
                                        ),
                                      ),
                                    SizedBox(
                                      height: 30,
                                    ),
                                  ],
                                ),
                              ),
                            )
                          : Center(
                              child: ErrorMessage(
                              error: TranslationBase.of(context).noDataAvailable,
                            ))
                    ],
                  ),
                ),
              ),
            ],
          ),
        ),
      // ),
    );
  }
}
