import 'package:doctor_app_flutter/config/size_config.dart';
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/icons_app/doctor_app_icons.dart';
import 'package:doctor_app_flutter/models/SOAP/GeneralGetReqForSOAP.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/date-utils.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.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/app_texts_widget.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

/*
 *@author: Elham Rababah
 *@Date:22/4/2020
 *@param:
 *@return:PatientProfileWidget
 *@desc:   Patient Profile Widget
 */
// ignore: must_be_immutable
class PatientProfileScreen extends StatelessWidget {
  PatiantInformtion patient;
  bool isFromSearch = false;
  //TODO change it
  @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 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,
              body: Container(
                color: Color(0XFFF2F2F2),
                child: CustomScrollView(primary: false, slivers: <Widget>[
                  SliverList(
                    delegate: SliverChildListDelegate(
                      [
                        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) /*patient.age*/}",
                                                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,
                                                              ),
                                                            ],
                                                          ),
                                                        ),
                                                      ],
                                                    ),
                                                  ),
                                                ),
                                              ],
                                            ),
                                          )
                                        ],
                                      ),
                                    )
                                  ],
                                ),
                              ),
                          ],
                        ),
                      ],
                    ),
                  ),
                  SliverPadding(
                    padding: const EdgeInsets.all(16.0),
                    sliver: isFromSearch
                        ? ProfileMedicalInfoWidgetSearch(
                            patient: patient,
                            patientType: patientType,
                            from: from,
                            to: to,
                          )
                        : ProfileMedicalInfoWidget(
                            patient: patient,
                            patientType: patientType,
                            from: from,
                            to: to,
                          ),
                  )
                ]),
              ),
            ));
  }
}

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,
    );
  }
}
