import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart';
import 'package:doctor_app_flutter/models/patient/patiant_info_model.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/shared/app_texts_widget.dart';
import 'package:flutter/material.dart';

import './profile_medical_info_widget.dart';

/* 
 *@author: Elham Rababah 
 *@Date:22/4/2020  
 *@param: 
 *@return:PatientProfileWidget
 *@desc:   Patient Profile Widget
 */
class PatientProfileWidget extends StatelessWidget {
  PatiantInformtion patient;

  @override
  Widget build(BuildContext context) {
    final routeArgs = ModalRoute.of(context).settings.arguments as Map;
    patient = routeArgs['patient'];

    return 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: 20,
                                    ),
                                    AppText(
                                      patient.patientId.toString(),
                                      color: Colors.black,
                                      fontWeight: FontWeight.normal,
                                    ),
                                  ],
                                )
                              ],
                            )
                          ],
                        ),
                      ),
                      Container(
                        width: double.infinity,
                        height: 1,
                        color: Color(0xffCCCCCC),
                      ),
                      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).age,
                                      fontWeight: FontWeight.bold,
                                      fontSize: 2 * SizeConfig.textMultiplier,
                                    ),
                                    SizedBox(
                                      height: 4,
                                    ),
                                    AppText(
                                      "${DateUtils.convertDateFromServerFormat(patient.dateofBirth, 'dd-MM-yyyy')} / ${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,
                                      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.genderDescription,
                                      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,
                                            ),
                                          ),
                                          AppText(
                                            patient.admissionDate != null
                                                ? "${DateUtils.convertDateFromServerFormat(patient.admissionDate, '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.admissionDate != null
                                                ? DateUtils
                                                    .differenceBetweenServerDateAndCurrent(
                                                        patient.admissionDate)
                                                : "",
                                            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,
                                                    ),
                                                    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: ProfileMedicalInfoWidget(
              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,
    );
  }
}
