import 'package:doctor_app_flutter/core/enum/master_lookup_key.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/GeneralGetReqForSOAP.dart';
import 'package:doctor_app_flutter/models/SOAP/PostEpisodeReqModel.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/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/patient-profile-header-new-design.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/profile_medical_info_widget.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/profile_medical_info_widget_search.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/borderedButton.dart';
import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

import '../../../routes.dart';

// ignore: must_be_immutable
class PatientProfileScreen extends StatelessWidget {
  PatiantInformtion patient;
  bool isFromSearch = false;

  @override
  Widget build(BuildContext context) {
    final routeArgs = ModalRoute.of(context).settings.arguments as Map;
    ProjectViewModel projectViewModel = Provider.of(context);

    patient = routeArgs['patient'];
    String patientType = routeArgs['patientType'];
    String arrivalType = routeArgs['arrivalType'];
    String from = routeArgs['from'];
    String to = routeArgs['to'];
    if (routeArgs.containsKey("isSearch")) {
      isFromSearch = routeArgs['isSearch'];
    }

    return BaseView<SOAPViewModel>(
        onModelReady: (model) async {
          GeneralGetReqForSOAP generalGetReqForSOAP = GeneralGetReqForSOAP(
              patientMRN: patient.patientMRN ?? patient.patientId,
              doctorID: '',
              editedBy: '');
          await model.getPatientAllergy(generalGetReqForSOAP);
          if (model.allergiesList.length == 0) {
            await model.getMasterLookup(MasterKeysService.Allergies);
          }
          if (model.allergySeverityList.length == 0) {
            await model.getMasterLookup(MasterKeysService.AllergySeverity);
          }
        },
        builder: (_, model, w) => AppScaffold(
              baseViewModel: model,
              appBarTitle: TranslationBase.of(context).patientProfile,
              isShowAppBar: false,
              body: Container(
                color: Color(0XFFF2F2F2),
                child: Stack(
                  children: [
                    Container(
                      child: Column(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: [
                          PatientProfileHeaderNewDesign(
                              patient, patientType, arrivalType),
                          Expanded(
                            child: Padding(
                              padding: const EdgeInsets.all(16.0),
                              child: SingleChildScrollView(
                                child: Column(
                                  children: [
                                    isFromSearch
                                        ? ProfileMedicalInfoWidgetSearch(
                                            patient: patient,
                                            patientType: patientType,
                                            arrivalType: arrivalType,
                                            from: from,
                                            to: to,
                                          )
                                        : ProfileMedicalInfoWidget(
                                            patient: patient,
                                            patientType: patientType,
                                            arrivalType: arrivalType,
                                            from: from,
                                            to: to,
                                          ),
                                  ],
                                ),
                              ),
                            ),
                          )
                        ],
                      ),
                    ),
                    if (int.parse(patientType) == 7 ||
                        int.parse(patientType) == 6)
                      Positioned(
                        top: 175,
                        left: 20,
                        right: 20,
                        child: Row(
                          children: [
                            Expanded(child: Container()),
                            if (patient.episodeNo == 0)
                              BorderedButton(
                                "${TranslationBase.of(context).createNew}\n${TranslationBase.of(context).episode}",
                                backgroundColor: patient.patientStatusType == 43
                                    ? Colors.red.shade700
                                    : Colors.grey.shade700,
                                textColor: Colors.white,
                                vPadding: 8,
                                radius: 30,
                                hPadding: 20,
                                fontWeight: FontWeight.normal,
                                fontSize: 12,
                                fontFamily: 'Poppins',
                                icon: Image.asset(
                                  "assets/images/create-episod.png",
                                  color: Colors.white,
                                  height: 30,
                                ),
                                handler: () async {
                                  if (patient.patientStatusType == 43) {
                                    PostEpisodeReqModel postEpisodeReqModel =
                                        PostEpisodeReqModel(
                                            appointmentNo:
                                                patient.appointmentNo,
                                            patientMRN: patient.patientMRN);
                                    GifLoaderDialogUtils.showMyDialog(context);
                                    await model
                                        .postEpisode(postEpisodeReqModel);
                                    GifLoaderDialogUtils.hideDialog(context);
                                    patient.episodeNo = model.episodeID;
                                    Navigator.of(context).pushNamed(
                                        CREATE_EPISODE,
                                        arguments: {'patient': patient});
                                  }
                                },
                              ),
                            if (patient.episodeNo != 0)
                              BorderedButton(
                                "${TranslationBase.of(context).update}\n${TranslationBase.of(context).episode}",
                                  backgroundColor:
                                      patient.patientStatusType == 43
                                          ? Colors.red.shade700
                                          : Colors.grey.shade700,
                                  textColor: Colors.white,
                                  vPadding: 8,
                                  radius: 30,
                                  hPadding: 20,
                                  fontWeight: FontWeight.normal,
                                  fontSize: 12,
                                  fontFamily: 'Poppins',
                                  icon: Image.asset(
                                    "assets/images/modilfy-episode.png",
                                    color: Colors.white,
                                    height: 30,
                                ),
                                handler: () {
                                  if (patient.patientStatusType == 43) {
                                    Navigator.of(context).pushNamed(
                                        UPDATE_EPISODE,
                                        arguments: {'patient': patient});
                                  }
                                }
                              ),
                          ],
                        ),
                      ),
                  ],
                ),
              ),
            ));
  }
}

class AvatarWidget extends StatelessWidget {
  final Widget avatarIcon;

  AvatarWidget(this.avatarIcon);

  @override
  Widget build(BuildContext context) {
    return Container(
      decoration: BoxDecoration(
        boxShadow: [
          BoxShadow(
              color: Color.fromRGBO(0, 0, 0, 0.08),
              offset: Offset(0.0, 5.0),
              blurRadius: 16.0)
        ],
        borderRadius: BorderRadius.all(Radius.circular(35.0)),
        color: Color(0xffCCCCCC),
      ),
      child: avatarIcon,
    );
  }
}

/*  Column(
                              crossAxisAlignment: CrossAxisAlignment.start,
                              children: [
                                Container(
                                  decoration: BoxDecoration(boxShadow: <BoxShadow>[
                                    BoxShadow(
                                        color: Colors.grey.shade300,
                                        blurRadius: 10.0,
                                        spreadRadius: 0,
                                        offset: Offset(0, 10)),
                                  ], color: Colors.white),
                                  child: Column(children: <Widget>[
                                    Padding(
                                      padding: const EdgeInsets.all(8.0),
                                      child: Row(
                                        children: <Widget>[
                                          AvatarWidget(
                                            Icon(
                                              patient.genderDescription == "Male"
                                                  ? DoctorApp.male
                                                  : DoctorApp.female_icon,
                                              size: 70,
                                              color: Colors.white,
                                            ),
                                          ),
                                          SizedBox(
                                            width: 20,
                                          ),
                                          Column(
                                            crossAxisAlignment:
                                                CrossAxisAlignment.start,
                                            children: [
                                              AppText(
                                                patient.firstName +
                                                    ' ' +
                                                    patient.lastName,
                                                color: Colors.black,
                                                fontWeight: FontWeight.bold,
                                              ),
                                              Row(
                                                children: [
                                                  AppText(
                                                    TranslationBase.of(context)
                                                        .fileNo,
                                                    color: Colors.black,
                                                    fontWeight: FontWeight.bold,
                                                  ),
                                                  SizedBox(
                                                    width: 4,
                                                  ),
                                                  AppText(
                                                    patient.patientId.toString(),
                                                    color: Colors.black,
                                                    fontWeight: FontWeight.normal,
                                                  ),
                                                ],
                                              ),
                                              model.patientAllergiesList
                                                          .isNotEmpty &&
                                                      model.getAllergicNames(
                                                              projectViewModel
                                                                  .isArabic) !=
                                                          ''
                                                  ? Container(
                                                      width: MediaQuery.of(context)
                                                              .size
                                                              .width *
                                                          0.65,
                                                      child: Padding(
                                                        padding: const EdgeInsets
                                                            .symmetric(vertical: 8),
                                                        child: AppText(
                                                          TranslationBase.of(
                                                                      context)
                                                                  .allergicTO +
                                                              " : " +
                                                              model.getAllergicNames(
                                                                  projectViewModel
                                                                      .isArabic),
                                                          color: Color(0xFFB9382C),
                                                          fontWeight:
                                                              FontWeight.bold,
                                                        ),
                                                      ),
                                                    )
                                                  : AppText(''),
                                            ],
                                          )
                                        ],
                                      ),
                                    ),
                                    Container(
                                      width: double.infinity,
                                      height: 1,
                                      color: Color(0xffCCCCCC),
                                    ),
                                    Container(
                                      height: 11 * SizeConfig.textMultiplier,
                                      child: Row(
                                        children: [
                                          Expanded(
                                            child: Padding(
                                              padding: const EdgeInsets.fromLTRB(
                                                  16.0, 8.0, 8.0, 8.0),
                                              child: Column(
                                                crossAxisAlignment:
                                                    CrossAxisAlignment.start,
                                                children: [
                                                  AppText(
                                                    TranslationBase.of(context).age,
                                                    fontWeight: FontWeight.bold,
                                                    fontSize: 2 *
                                                        SizeConfig.textMultiplier,
                                                  ),
                                                  SizedBox(
                                                    height: 4,
                                                  ),
                                                  AppText(
                                                    "${DateUtils.convertDateFromServerFormat(patient.dateofBirth, 'dd-MM-yyyy')} / ${DateUtils.getAgeByBirthday(patient.dateofBirth, context)}",
                                                    fontWeight: FontWeight.normal,
                                                    fontSize: 1.6 *
                                                        SizeConfig.textMultiplier,
                                                  ),
                                                ],
                                              ),
                                            ),
                                          ),
                                          Container(
                                            width: 1,
                                            color: Color(0xffCCCCCC),
                                          ),
                                          Expanded(
                                            child: Padding(
                                              padding: const EdgeInsets.fromLTRB(
                                                  16.0, 8.0, 8.0, 8.0),
                                              child: Column(
                                                crossAxisAlignment:
                                                    CrossAxisAlignment.start,
                                                children: [
                                                  AppText(
                                                    TranslationBase.of(context)
                                                        .nationality,
                                                    fontWeight: FontWeight.bold,
                                                    fontSize: 2 *
                                                        SizeConfig.textMultiplier,
                                                  ),
                                                  SizedBox(
                                                    height: 4,
                                                  ),
                                                  AppText(
                                                    patient.nationalityName ??
                                                        patient.nationality,
                                                    fontWeight: FontWeight.normal,
                                                    fontSize: 1.7 *
                                                        SizeConfig.textMultiplier,
                                                  ),
                                                ],
                                              ),
                                            ),
                                          ),
                                          Container(
                                            width: 1,
                                            color: Color(0xffCCCCCC),
                                          ),
                                          Expanded(
                                            child: Padding(
                                              padding: const EdgeInsets.fromLTRB(
                                                  16.0, 8.0, 8.0, 8.0),
                                              child: Column(
                                                crossAxisAlignment:
                                                    CrossAxisAlignment.start,
                                                children: [
                                                  AppText(
                                                    TranslationBase.of(context)
                                                        .gender,
                                                    fontWeight: FontWeight.bold,
                                                    fontSize: 2 *
                                                        SizeConfig.textMultiplier,
                                                  ),
                                                  SizedBox(
                                                    height: 4,
                                                  ),
                                                  AppText(
                                                    patient.gender.toString() == '1'
                                                        ? 'Male'
                                                        : 'Female',
                                                    fontWeight: FontWeight.normal,
                                                    fontSize: 1.8 *
                                                        SizeConfig.textMultiplier,
                                                  ),
                                                ],
                                              ),
                                            ),
                                          ),
                                        ],
                                      ),
                                    ),
                                    Container(
                                      width: double.infinity,
                                      height: 1,
                                      color: Color(0xffCCCCCC),
                                    ),
                                  ]),
                                ),
                                if (patient.admissionNo != null)
                                  Container(
                                    margin: EdgeInsets.all(16),
                                    child: Column(
                                      crossAxisAlignment: CrossAxisAlignment.start,
                                      children: [
                                        AppText(
                                          TranslationBase.of(context)
                                              .admissionDetail,
                                          color: Colors.black,
                                          fontWeight: FontWeight.bold,
                                          fontSize: 1.8 * SizeConfig.textMultiplier,
                                        ),
                                        SizedBox(
                                          height: 4,
                                        ),
                                        Container(
                                          decoration: BoxDecoration(
                                            color: Colors.white,
                                            shape: BoxShape.rectangle,
                                            borderRadius: BorderRadius.circular(8),
                                            border:
                                                Border.fromBorderSide(BorderSide(
                                              color: Color(0xffBBBBBB),
                                              width: 1,
                                            )),
                                          ),
                                          child: Column(
                                            children: [
                                              Padding(
                                                padding: EdgeInsets.all(16),
                                                child: Column(
                                                  children: [
                                                    Row(
                                                      children: [
                                                        Container(
                                                          width: 14 *
                                                              SizeConfig
                                                                  .textMultiplier,
                                                          child: AppText(
                                                            TranslationBase.of(
                                                                    context)
                                                                .dateTime,
                                                            color: Colors.black,
                                                            fontWeight:
                                                                FontWeight.bold,
                                                            fontSize: 1.6 *
                                                                SizeConfig
                                                                    .textMultiplier,
                                                          ),
                                                        ),
                                                        Expanded(
                                                          child: AppText(
                                                            patient.createdOn !=
                                                                    null
                                                                ? "${DateUtils.convertDateFromServerFormat(patient.createdOn, 'EEEE dd, MMMM yyyy hh:mm a')}"
                                                                : "",
                                                            color: Colors.black,
                                                            fontWeight:
                                                                FontWeight.normal,
                                                            fontSize: 1.6 *
                                                                SizeConfig
                                                                    .textMultiplier,
                                                          ),
                                                        ),
                                                      ],
                                                    ),
                                                    SizedBox(
                                                      height: 4,
                                                    ),
                                                    Row(
                                                      children: [
                                                        Container(
                                                          width: 14 *
                                                              SizeConfig
                                                                  .textMultiplier,
                                                          child: AppText(
                                                            TranslationBase.of(
                                                                    context)
                                                                .admissionNo,
                                                            color: Colors.black,
                                                            fontWeight:
                                                                FontWeight.bold,
                                                            fontSize: 1.6 *
                                                                SizeConfig
                                                                    .textMultiplier,
                                                          ),
                                                        ),
                                                        AppText(
                                                          patient.admissionNo !=
                                                                  null
                                                              ? patient.admissionNo
                                                              : '',
                                                          color: Colors.black,
                                                          fontWeight:
                                                              FontWeight.normal,
                                                          fontSize: 1.6 *
                                                              SizeConfig
                                                                  .textMultiplier,
                                                        ),
                                                      ],
                                                    ),
                                                    SizedBox(
                                                      height: 4,
                                                    ),
                                                    Row(
                                                      children: [
                                                        Container(
                                                          width: 14 *
                                                              SizeConfig
                                                                  .textMultiplier,
                                                          child: AppText(
                                                            TranslationBase.of(
                                                                    context)
                                                                .losNo,
                                                            color: Colors.black,
                                                            fontWeight:
                                                                FontWeight.bold,
                                                            fontSize: 1.6 *
                                                                SizeConfig
                                                                    .textMultiplier,
                                                          ),
                                                        ),
                                                        AppText(
                                                          patient.createdOn != null
                                                              ? DateUtils
                                                                  .differenceBetweenServerDateAndCurrent(
                                                                      patient
                                                                          .createdOn,
                                                                      context)
                                                              : "",
                                                          color: Colors.black,
                                                          fontWeight:
                                                              FontWeight.normal,
                                                          fontSize: 1.6 *
                                                              SizeConfig
                                                                  .textMultiplier,
                                                        ),
                                                      ],
                                                    ),
                                                  ],
                                                ),
                                              ),
                                              const Divider(
                                                color: Color(0xffCCCCCC),
                                                height: 5,
                                                thickness: 1,
                                                indent: 0,
                                                endIndent: 0,
                                              ),
                                              Container(
                                                height:
                                                    10 * SizeConfig.textMultiplier,
                                                child: Row(
                                                  children: [
                                                    Expanded(
                                                      child: Padding(
                                                        padding: const EdgeInsets
                                                                .fromLTRB(
                                                            16.0, 8.0, 8.0, 8.0),
                                                        child: Column(
                                                          crossAxisAlignment:
                                                              CrossAxisAlignment
                                                                  .start,
                                                          children: [
                                                            AppText(
                                                              TranslationBase.of(
                                                                      context)
                                                                  .area,
                                                              fontWeight:
                                                                  FontWeight.bold,
                                                              fontSize: 1.6 *
                                                                  SizeConfig
                                                                      .textMultiplier,
                                                            ),
                                                            SizedBox(
                                                              height: 4,
                                                            ),
                                                            AppText(
                                                              patient
                                                                  .clinicDescription,
                                                              fontWeight:
                                                                  FontWeight.normal,
                                                              fontSize: 1.6 *
                                                                  SizeConfig
                                                                      .textMultiplier,
                                                            ),
                                                          ],
                                                        ),
                                                      ),
                                                    ),
                                                    Container(
                                                      width: 1,
                                                      color: Color(0xffCCCCCC),
                                                    ),
                                                    Expanded(
                                                      child: Padding(
                                                        padding: const EdgeInsets
                                                                .fromLTRB(
                                                            16.0, 8.0, 8.0, 8.0),
                                                        child: Column(
                                                          crossAxisAlignment:
                                                              CrossAxisAlignment
                                                                  .start,
                                                          mainAxisAlignment:
                                                              MainAxisAlignment
                                                                  .spaceEvenly,
                                                          children: [
                                                            Expanded(
                                                              child: Row(
                                                                crossAxisAlignment:
                                                                    CrossAxisAlignment
                                                                        .start,
                                                                children: [
                                                                  AppText(
                                                                    TranslationBase.of(
                                                                            context)
                                                                        .room,
                                                                    fontWeight:
                                                                        FontWeight
                                                                            .bold,
                                                                    fontSize: 1.6 *
                                                                        SizeConfig
                                                                            .textMultiplier,
                                                                  ),
                                                                  SizedBox(
                                                                    width: 4,
                                                                  ),
                                                                  Expanded(
                                                                    child: AppText(
                                                                      "${patient.nursingStationName}\n${patient.roomId}",
                                                                      fontWeight:
                                                                          FontWeight
                                                                              .normal,
                                                                      fontSize: 1.4 *
                                                                          SizeConfig
                                                                              .textMultiplier,
                                                                    ),
                                                                  ),
                                                                ],
                                                              ),
                                                            ),
                                                            SizedBox(
                                                              height: 4,
                                                            ),
                                                            Expanded(
                                                              child: Row(
                                                                crossAxisAlignment:
                                                                    CrossAxisAlignment
                                                                        .start,
                                                                children: [
                                                                  AppText(
                                                                    TranslationBase.of(
                                                                            context)
                                                                        .bed,
                                                                    fontWeight:
                                                                        FontWeight
                                                                            .bold,
                                                                    fontSize: 1.6 *
                                                                        SizeConfig
                                                                            .textMultiplier,
                                                                  ),
                                                                  SizedBox(
                                                                    width: 4,
                                                                  ),
                                                                  AppText(
                                                                    "${patient.bedId}",
                                                                    fontWeight:
                                                                        FontWeight
                                                                            .normal,
                                                                    fontSize: 1.6 *
                                                                        SizeConfig
                                                                            .textMultiplier,
                                                                  ),
                                                                ],
                                                              ),
                                                            ),
                                                          ],
                                                        ),
                                                      ),
                                                    ),
                                                  ],
                                                ),
                                              )
                                            ],
                                          ),
                                        )
                                      ],
                                    ),
                                  ),
                              ],
                            ),*/
