import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/model/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/core/service/AnalyticsService.dart';
import 'package:doctor_app_flutter/core/viewModel/patient-vital-sign-viewmodel.dart';
import 'package:doctor_app_flutter/locator.dart';
import 'package:doctor_app_flutter/lookups/patient_lookup.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/screens/patients/profile/vital_sign/vital_sign_item.dart';
import 'package:doctor_app_flutter/screens/patients/profile/vital_sign/vital_sign_item_details_screen.dart';
import 'package:doctor_app_flutter/utils/translations_delegate_base_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/errors/error_message.dart';
import 'package:doctor_app_flutter/widgets/transitions/fade_page.dart';
import 'package:flutter/material.dart';

class VitalSignDetailsScreen extends StatelessWidget {
  int? appointmentNo;
  int? projectID;
  bool isNotOneAppointment;

  VitalSignDetailsScreen({this.appointmentNo, this.projectID, this.isNotOneAppointment = true});

  @override
  Widget build(BuildContext context) {
    final routeArgs = ModalRoute.of(context)!.settings.arguments as Map;
    PatiantInformtion patient = routeArgs['patient'];
    String patientType = routeArgs['patientType'];
    String arrivalType = routeArgs['arrivalType'];
    String from = routeArgs['from'];
    String to = routeArgs['to'];
    bool isInpatient = routeArgs['isInpatient'];
    String imageBasePath = 'assets/images/';
    String assetBasePath = "${imageBasePath}patient/vital_signs/";

    return BaseView<VitalSignsViewModel>(
      onModelReady: (model) => model.getPatientVitalSignHistory(patient, from, to, isInpatient),
      builder: (_, mode, widget) => AppScaffold(
        baseViewModel: mode,
        isShowAppBar: true,
        backgroundColor: Theme.of(context).scaffoldBackgroundColor,
        appBar: PatientProfileAppBar(patient),
        appBarTitle: TranslationBase.of(context).vitalSign,
        body: mode.patientVitalSignsHistory.length > 0
            ? Column(
                children: [
                  Expanded(
                    child: Container(
                      child: Column(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: [
                          Container(
                            margin: EdgeInsets.all(16.0),
                            child: Column(
                              crossAxisAlignment: CrossAxisAlignment.start,
                              children: [
                                AppText(
                                  "${patient.firstName ?? patient.patientDetails?.firstName ?? patient.fullName ?? ''}'s",
                                  fontSize: SizeConfig.textMultiplier! * 1.6,
                                  fontWeight: FontWeight.w700,
                                  color: Color(0xFF2E303A),
                                ),
                                AppText(
                                  TranslationBase.of(context).vitalSign,
                                  fontSize: SizeConfig.textMultiplier! * 3,
                                  fontWeight: FontWeight.bold,
                                  color: Color(0xFF2E303A),
                                )
                              ],
                            ),
                          ),
                          Container(
                            height: MediaQuery.of(context).size.height * 0.23,
                            width: double.infinity,
                            padding: EdgeInsets.all(12.0),
                            margin: EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0),
                            decoration: BoxDecoration(
                              shape: BoxShape.rectangle,
                              color: Colors.white,
                              borderRadius: BorderRadius.circular(16),
                              border: Border.fromBorderSide(BorderSide(
                                color: Colors.grey.shade400,
                                width: 0.4,
                              )),
                            ),
                            child: Column(
                              crossAxisAlignment: CrossAxisAlignment.start,
                              children: [
                                AppText(
                                  "${TranslationBase.of(context).yourBodyMassIndex} ${mode.bodyMax}",
                                  color: Color(0xFF2E303A),
                                  fontSize: SizeConfig.textMultiplier! * 2.0,
                                  fontWeight: FontWeight.w700,
                                ),
                                Row(
                                  mainAxisAlignment: MainAxisAlignment.center,
                                  children: [
                                    Expanded(
                                        child: Column(
                                      crossAxisAlignment: CrossAxisAlignment.center,
                                      children: [
                                        Image.asset(
                                          mode.getBMIStatus() != 1 ? '${assetBasePath}underweight_BMI.png' : '${assetBasePath}underweight_BMI-r.png',
                                          height: MediaQuery.of(context).size.height * 0.10,
                                        ),
                                        const SizedBox(
                                          height: 4,
                                        ),
                                        AppText(
                                          "${TranslationBase.of(context).bmiUnderWeight}",
                                          fontFamily: 'Poppins',
                                          fontSize: SizeConfig.textMultiplier! * 1.15,
                                          color: mode.getBMIStatus() == 1 ? Color(0XFFD02127) : Colors.transparent,
                                          fontWeight: FontWeight.w700,
                                        ),
                                        AppText(
                                          "(<18.5)",
                                          fontFamily: 'Poppins',
                                          fontSize: SizeConfig.textMultiplier! * 1.15,
                                          color: mode.getBMIStatus() == 1 ? Color(0XFFD02127) : Colors.transparent,
                                          fontWeight: FontWeight.w700,
                                        ),
                                      ],
                                    )),
                                    Expanded(
                                        child: Column(
                                      crossAxisAlignment: CrossAxisAlignment.center,
                                      children: [
                                        Image.asset(
                                          mode.getBMIStatus() != 2 ? '${assetBasePath}health_BMI.png' : '${assetBasePath}health_BMI-r.png',
                                          height: MediaQuery.of(context).size.height * 0.10,
                                        ),
                                        const SizedBox(
                                          height: 4,
                                        ),
                                        Container(
                                          child: AppText(
                                            "${TranslationBase.of(context).normal}",
                                            fontFamily: 'Poppins',
                                            fontSize: SizeConfig.textMultiplier! * 1.15,
                                            fontWeight: FontWeight.w700,
                                            color: mode.getBMIStatus() == 2 ? Color(0XFFD02127) : Colors.transparent,
                                          ),
                                        ),
                                        AppText(
                                          "(18.5-24.9)",
                                          fontFamily: 'Poppins',
                                          fontSize: SizeConfig.textMultiplier! * 1.15,
                                          fontWeight: FontWeight.w700,
                                          color: mode.getBMIStatus() == 2 ? Color(0XFFD02127) : Colors.transparent,
                                        ),
                                      ],
                                    )),
                                    Expanded(
                                        child: Column(
                                      crossAxisAlignment: CrossAxisAlignment.center,
                                      children: [
                                        Image.asset(
                                          mode.getBMIStatus() != 3 ? '${assetBasePath}ovrweight_BMI.png' : '${assetBasePath}ovrweight_BMI-r.png',
                                          height: MediaQuery.of(context).size.height * 0.10,
                                        ),
                                        const SizedBox(
                                          height: 4,
                                        ),
                                        AppText(
                                          "${TranslationBase.of(context).bmiOverWeight}",
                                          fontFamily: 'Poppins',
                                          fontSize: SizeConfig.textMultiplier! * 1.155,
                                          fontWeight: FontWeight.w700,
                                          color: mode.getBMIStatus() == 3 ? Color(0XFFD02127) : Colors.transparent,
                                        ),
                                        AppText(
                                          "(25-29.9)",
                                          fontFamily: 'Poppins',
                                          fontSize: SizeConfig.textMultiplier! * 1.155,
                                          fontWeight: FontWeight.w700,
                                          color: mode.getBMIStatus() == 3 ? Color(0XFFD02127) : Colors.transparent,
                                        ),
                                      ],
                                    )),
                                    Expanded(
                                        child: Column(
                                      crossAxisAlignment: CrossAxisAlignment.center,
                                      children: [
                                        Image.asset(
                                          mode.getBMIStatus() != 4 ? '${assetBasePath}Obese_BMI.png' : '${assetBasePath}Obese_BMI-r.png',
                                          height: MediaQuery.of(context).size.height * 0.10,
                                        ),
                                        const SizedBox(
                                          height: 4,
                                        ),
                                        AppText(
                                          "${TranslationBase.of(context).bmiObese}",
                                          fontFamily: 'Poppins',
                                          fontSize: SizeConfig.textMultiplier! * 1.15,
                                          fontWeight: FontWeight.w700,
                                          color: mode.getBMIStatus() == 4 ? Color(0XFFD02127) : Colors.transparent,
                                        ),
                                        AppText(
                                          "(30-34.9)",
                                          fontFamily: 'Poppins',
                                          fontSize: SizeConfig.textMultiplier! * 1.15,
                                          fontWeight: FontWeight.w700,
                                          color: mode.getBMIStatus() == 4 ? Color(0XFFD02127) : Colors.transparent,
                                        ),
                                      ],
                                    )),
                                    Expanded(
                                        child: Column(
                                      crossAxisAlignment: CrossAxisAlignment.center,
                                      children: [
                                        Image.asset(
                                          mode.getBMIStatus() != 5 ? '${assetBasePath}Obese_BMI.png' : '${assetBasePath}Obese_BMI-r.png',
                                          height: MediaQuery.of(context).size.height * 0.10,
                                        ),
                                        const SizedBox(
                                          height: 4,
                                        ),
                                        FittedBox(
                                          fit: BoxFit.fitWidth,
                                          child: AppText(
                                            "${TranslationBase.of(context).bmiObeseExtreme}",
                                            fontFamily: 'Poppins',
                                            fontSize: SizeConfig.textMultiplier! * 1.15,
                                            fontWeight: FontWeight.w700,
                                            color: mode.getBMIStatus() == 5 ? Color(0XFFD02127) : Colors.transparent,
                                          ),
                                        ),
                                        AppText(
                                          "(>35)",
                                          fontFamily: 'Poppins',
                                          fontSize: SizeConfig.textMultiplier! * 1.15,
                                          fontWeight: FontWeight.w700,
                                          color: mode.getBMIStatus() == 5 ? Color(0XFFD02127) : Colors.transparent,
                                        ),
                                      ],
                                    )),
                                  ],
                                )
                              ],
                            ),
                          ),
                          Expanded(
                            child: SingleChildScrollView(
                              child: Container(
                                margin: EdgeInsets.symmetric(horizontal: 16.0, vertical: 16),
                                child: Column(
                                  crossAxisAlignment: CrossAxisAlignment.start,
                                  children: [
                                    GridView.count(
                                      shrinkWrap: true,
                                      physics: NeverScrollableScrollPhysics(),
                                      crossAxisSpacing: 8,
                                      mainAxisSpacing: 12,
                                      crossAxisCount: 3,
                                      children: [
                                        InkWell(
                                          onTap: () => isNotOneAppointment
                                              ? Navigator.push(
                                                  context,
                                                  FadePage(
                                                    page: VitalSignItemDetailsScreen(
                                                      pageKey: vitalSignDetails.Height,
                                                      pageTitle: TranslationBase.of(context).height,
                                                      vitalList: mode.patientVitalSignsHistory,
                                                      patient: patient,
                                                      patientType: patientType,
                                                      arrivalType: arrivalType,
                                                    ),
                                                  ),
                                                )
                                              : null,
                                          child: Container(
                                            child: VitalSignItem(
                                              des: TranslationBase.of(context).height,
                                              imagePath: "${assetBasePath}height.png",
                                              lastVal: mode.heightCm,
                                              unit: TranslationBase.of(context).cm,
                                            ),
                                          ),
                                        ),
                                        if (isNotOneAppointment)
                                          InkWell(
                                            onTap: () async {
                                              await locator<AnalyticsService>().logEvent(
                                                eventCategory: "Vital Sign Details Screen",
                                                eventAction: "Vital Sign Details",
                                              );

                                              Navigator.push(
                                                context,
                                                FadePage(
                                                  page: VitalSignItemDetailsScreen(
                                                    pageKey: vitalSignDetails.Weight,
                                                    pageTitle: TranslationBase.of(context).weight,
                                                    vitalList: mode.patientVitalSignsHistory,
                                                    patient: patient,
                                                    patientType: patientType,
                                                    arrivalType: arrivalType,
                                                  ),
                                                ),
                                              );
                                            },
                                            child: VitalSignItem(
                                              des: TranslationBase.of(context).weight,
                                              imagePath: "${assetBasePath}weight.png",
                                              unit: TranslationBase.of(context).kg,
                                              lastVal: mode.weightKg,
                                            ),
                                          ),
                                        InkWell(
                                          onTap: () => isNotOneAppointment
                                              ? Navigator.push(
                                                  context,
                                                  FadePage(
                                                    page: VitalSignItemDetailsScreen(
                                                      pageKey: vitalSignDetails.Temperature,
                                                      pageTitle: TranslationBase.of(context).temperature,
                                                      vitalList: mode.patientVitalSignsHistory,
                                                      patient: patient,
                                                      patientType: patientType,
                                                      arrivalType: arrivalType,
                                                    ),
                                                  ),
                                                )
                                              : null,
                                          child: Container(
                                            child: VitalSignItem(
                                              des: TranslationBase.of(context).temperature,
                                              imagePath: "${assetBasePath}temperature.png",
                                              lastVal: mode.temperatureCelcius,
                                              unit: TranslationBase.of(context).tempC,
                                            ),
                                          ),
                                        ),
                                        InkWell(
                                          onTap: () => isNotOneAppointment
                                              ? Navigator.push(
                                                  context,
                                                  FadePage(
                                                    page: VitalSignItemDetailsScreen(
                                                      pageKey: vitalSignDetails.heart,
                                                      pageTitle: TranslationBase.of(context).heart,
                                                      vitalList: mode.patientVitalSignsHistory,
                                                      patient: patient,
                                                      patientType: patientType,
                                                      arrivalType: arrivalType,
                                                    ),
                                                  ),
                                                )
                                              : null,
                                          child: VitalSignItem(
                                            des: TranslationBase.of(context).heart,
                                            imagePath: "${assetBasePath}heart_rate.png",
                                            lastVal: mode.hartRat,
                                            unit: TranslationBase.of(context).bpm,
                                          ),
                                        ),
                                        InkWell(
                                          onTap: () => isNotOneAppointment
                                              ? Navigator.push(
                                                  context,
                                                  FadePage(
                                                    page: VitalSignItemDetailsScreen(
                                                      pageKey: vitalSignDetails.Respiration,
                                                      pageTitle: TranslationBase.of(context).respirationRate,
                                                      vitalList: mode.patientVitalSignsHistory,
                                                      patient: patient,
                                                      patientType: patientType,
                                                      arrivalType: arrivalType,
                                                    ),
                                                  ),
                                                )
                                              : null,
                                          child: VitalSignItem(
                                            des: TranslationBase.of(context).respirationRate,
                                            imagePath: "${assetBasePath}respiration_rate.png",
                                            lastVal: mode.respirationBeatPerMinute,
                                            unit: TranslationBase.of(context).respirationSigns,
                                          ),
                                        ),
                                        InkWell(
                                          onTap: () => isNotOneAppointment
                                              ? Navigator.push(
                                                  context,
                                                  FadePage(
                                                    page: VitalSignItemDetailsScreen(
                                                      pageKey: vitalSignDetails.BloodPressure,
                                                      pageTitle: TranslationBase.of(context).bloodPressure,
                                                      vitalList: mode.patientVitalSignsHistory,
                                                      patient: patient,
                                                      patientType: patientType,
                                                      arrivalType: arrivalType,
                                                      viewKey1: 'BloodPressureHigher',
                                                      viewKey2: 'BloodPressureLower',
                                                    ),
                                                  ),
                                                )
                                              : null,
                                          child: VitalSignItem(
                                            des: TranslationBase.of(context).bloodPressure,
                                            imagePath: "${assetBasePath}blood_pressure.png",
                                            lastVal: mode.bloodPressure,
                                            unit: TranslationBase.of(context).sysDias,
                                          ),
                                        ),
                                        InkWell(
                                          onTap: () => isNotOneAppointment
                                              ? Navigator.push(
                                                  context,
                                                  FadePage(
                                                    page: VitalSignItemDetailsScreen(
                                                      pageKey: vitalSignDetails.Oxygenation,
                                                      pageTitle: TranslationBase.of(context).oxygenation,
                                                      vitalList: mode.patientVitalSignsHistory,
                                                      patient: patient,
                                                      patientType: patientType,
                                                      arrivalType: arrivalType,
                                                    ),
                                                  ),
                                                )
                                              : null,
                                          child: VitalSignItem(
                                            des: TranslationBase.of(context).oxygenation,
                                            imagePath: "${assetBasePath}oxg.png",
                                            lastVal: "${mode.oxygenation}%",
                                            unit: "",
                                          ),
                                        ),
                                        InkWell(
                                          onTap: () => isNotOneAppointment
                                              ? Navigator.push(
                                                  context,
                                                  FadePage(
                                                    page: VitalSignItemDetailsScreen(
                                                      pageKey: vitalSignDetails.PainScale,
                                                      pageTitle: TranslationBase.of(context).painScale,
                                                      vitalList: mode.patientVitalSignsHistory,
                                                      patient: patient,
                                                      patientType: patientType,
                                                      arrivalType: arrivalType,
                                                    ),
                                                  ),
                                                )
                                              : null,
                                          child: VitalSignItem(
                                            des: TranslationBase.of(context).painScale,
                                            imagePath: "${assetBasePath}painScale.png",
                                            lastVal: mode.painScore,
                                            unit: TranslationBase.of(context).severe,
                                          ),
                                        ),
                                      ],
                                    ),
                                  ],
                                ),
                              ),
                            ),
                          ),
                        ],
                      ),
                    ),
                  ),
                ],
              )
            : Container(
                color: Theme.of(context).scaffoldBackgroundColor,
                child: ErrorMessage(
                  error: TranslationBase.of(context).vitalSignEmptyMsg,
                )),
      ),
    );
  }
}
