import 'package:doctor_app_flutter/config/size_config.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/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/util/date-utils.dart';
import 'package:doctor_app_flutter/util/helpers.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 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher.dart';

import 'large_avatar.dart';

class PatientProfileAppBar extends StatelessWidget
    with PreferredSizeWidget {
  final PatiantInformtion patient;
  final double height;
  final bool isInpatient;
  final bool isDischargedPatient;
  final bool isFromLiveCare;

  final String doctorName;
  final String branch;
  final DateTime appointmentDate;
  final String profileUrl;
  final String invoiceNO;
  final String orderNo;
  final bool isPrescriptions;
  final bool isMedicalFile;
  final String episode;
  final String visitDate;
  final String clinic;
  final bool isAppointmentHeader;
  final bool isFromLabResult;
  final VoidCallback onPressed;

  PatientProfileAppBar(
      this.patient,
      {this.height = 0.0,
      this.isInpatient = false,
      this.isDischargedPatient = false,
      this.isFromLiveCare = false,
      this.doctorName,
      this.branch,
      this.appointmentDate,
      this.profileUrl,
      this.invoiceNO,
      this.orderNo,
      this.isPrescriptions = false,
      this.clinic,
      this.isMedicalFile = false,
      this.episode,
      this.visitDate,
      this.isAppointmentHeader = false,
      this.isFromLabResult = false, this.onPressed});


  @override
  Widget build(BuildContext context) {
    ProjectViewModel projectViewModel = Provider.of(context);

    int gender = 1;
    if (patient.patientDetails != null) {
      gender = patient.patientDetails.gender;
    } else {
      gender = patient.gender;
    }

    return Container(
      padding: EdgeInsets.only(
        left: 0,
        right: 5,
        bottom: 5,
      ),
      decoration: BoxDecoration(
        color: Colors.white,
      ),
      // height: height == 0
      //     ? isInpatient
      //     ? 215
      //     : isAppointmentHeader
      //     ? 325
      //     : 200
      //     : height,
      child: Container(
        padding: EdgeInsets.only(left: 10, right: 10, bottom: 10),
        margin: EdgeInsets.only(top: 50),
        child: Column(
          children: [
            Container(
              padding: EdgeInsets.only(left: 12.0),
              child: Row(children: [
                IconButton(
                  icon: Icon(Icons.arrow_back_ios),
                  color: Color(0xFF2B353E), //Colors.black,
                  onPressed: () {
                    if(onPressed!=null)
                      onPressed();
                      Navigator.pop(context);
                  },
                ),
                Expanded(
                  child: AppText(
                    patient.firstName != null
                        ? (Helpers.capitalize(patient.firstName) +
                        " " +
                        Helpers.capitalize(patient.lastName))
                        : Helpers.capitalize(patient.fullName??patient.patientDetails.fullName),
                    fontSize: SizeConfig.textMultiplier * 1.8,
                    fontWeight: FontWeight.bold,
                    fontFamily: 'Poppins',
                    color: Color(0xFF2B353E),
                  ),
                ),
                gender == 1
                    ? Icon(
                  DoctorApp.male_2,
                  color: Colors.blue,
                )
                    : Icon(
                  DoctorApp.female_1,
                  color: Colors.pink,
                ),
                Container(
                  margin: EdgeInsets.symmetric(horizontal: 4),
                  child: InkWell(
                    onTap: () {
                      launch("tel://" + patient.mobileNumber);
                    },
                    child: Icon(
                      Icons.phone,
                      color: Colors.black87,
                    ),
                  ),
                ),
              ]),
            ),
            Row(children: [
              Padding(
                padding: EdgeInsets.only(left: 12.0),
                child: Container(
                  width: 60,
                  height: 60,
                  child: Image.asset(
                    gender == 1
                        ? 'assets/images/male_avatar.png'
                        : 'assets/images/female_avatar.png',
                    fit: BoxFit.cover,
                  ),
                ),
              ),
              SizedBox(
                width: 10,
              ),
              Expanded(
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    patient.patientStatusType != null
                        ? Container(
                        child: Row(
                          mainAxisAlignment: MainAxisAlignment.spaceBetween,
                          children: [
                            patient.patientStatusType == 43
                                ? AppText(
                              TranslationBase
                                  .of(context)
                                  .arrivedP,
                              color: Colors.green,
                              fontWeight: FontWeight.bold,
                              fontFamily: 'Poppins',
                              fontSize: 12,
                            )
                                  : AppText(
                                      TranslationBase.of(context).notArrived,
                                      color: Colors.red[800],
                                      fontWeight: FontWeight.bold,
                                      fontFamily: 'Poppins',
                                      fontSize: 12,
                                    ),
                              patient.startTime != null
                                  ? AppText(
                                      patient.startTime != null
                                          ? patient.startTime
                                          : '',
                                      fontWeight: FontWeight.w700,
                                      fontSize: 12,
                                      color: Color(0xFF2E303A))
                                  : SizedBox()
                            ],
                          ))
                        : SizedBox(),

                    Row(
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
                      children: [
                        RichText(
                          text: TextSpan(
                            style: TextStyle(
                                fontSize: 1.6 * SizeConfig.textMultiplier,
                                color: Colors.black),
                            children: <TextSpan>[
                              new TextSpan(
                                text: TranslationBase
                                    .of(context)
                                    .fileNumber,

                                style: TextStyle(
                                  fontSize: 10,
                                  fontFamily: 'Poppins',
                                  color: Color(0xFF575757),
                                  fontWeight: FontWeight.w600,

                                ),),
                              new TextSpan(
                                  text: patient.patientId.toString(),
                                  style: TextStyle(
                                    fontWeight: FontWeight.w700,
                                    fontFamily: 'Poppins',
                                    fontSize: 12, color: Color(0xFF2E303A),)),
                            ],
                          ),
                        ),
                        Row(
                          children: [
                            AppText(
                              patient.nationalityName ?? patient.nationality?? patient.nationalityId ?? '',
                              fontWeight: FontWeight.bold,
                              fontSize: 12,
                            ),
                            patient.nationalityFlagURL != null
                                ? ClipRRect(
                                borderRadius: BorderRadius.circular(20.0),
                                child: Image.network(
                                  patient.nationalityFlagURL,
                                  height: 25,
                                  width: 30,
                                  errorBuilder: (BuildContext context,
                                      Object exception,
                                      StackTrace stackTrace) {
                                    return Text('No Image');
                                  },
                                ))
                                : SizedBox()
                          ],
                        )
                      ],
                    ),
                    Container(
                      child: RichText(
                        text: new TextSpan(
                          style: new TextStyle(
                            fontSize: 1.6 * SizeConfig.textMultiplier,
                            color: Colors.black,
                            fontFamily: 'Poppins',
                          ),
                          children: <TextSpan>[
                            new TextSpan(
                                text: TranslationBase
                                    .of(context)
                                    .age + " : ",
                                style: TextStyle(fontSize: 10, fontWeight: FontWeight.w600,color: Color(0xFF575757),)),
                            new TextSpan(
                                text:
                                "${AppDateUtils.getAgeByBirthday(
                                    patient.patientDetails != null
                                        ? patient.patientDetails.dateofBirth ??
                                        ""
                                        : patient.dateofBirth ?? "", context,
                                    isServerFormat: !isFromLiveCare)}",
                                style: TextStyle(
                                  fontWeight: FontWeight.w700,
                                  fontSize: 12,
                                  color: Color(0xFF2E303A),)),
                          ],
                        ),
                      ),
                    ),

                    if ( patient.appointmentDate != null && patient.appointmentDate.isNotEmpty && !isFromLabResult)
                      Row(
                        mainAxisAlignment: MainAxisAlignment.start,
                        children: <Widget>[
                          AppText(
                            TranslationBase.of(context).appointmentDate +
                                " : ",
                            fontSize: 10,
                            color: Color(0xFF575757),
                            fontWeight: FontWeight.w600,
                            fontFamily: 'Poppins',
                          ),
                          SizedBox(
                            width: 3.5,
                          ),
                          AppText(
                            AppDateUtils
                                .getDayMonthYearDateFormatted(
                                AppDateUtils.convertStringToDate(
                                    patient.appointmentDate))
                            ,
                            fontWeight: FontWeight.w700,
                            fontSize: 12,
                            color: Color(0xFF2E303A),
                          ),
                          SizedBox(
                            height: 0.5,
                          )
                        ],
                      ),
                    if(isFromLabResult)Container(
                      child: RichText(
                        text: new TextSpan(
                          style: new TextStyle(
                            fontSize: 1.6 * SizeConfig.textMultiplier,
                            color: Colors.black,
                            fontFamily: 'Poppins',
                          ),
                          children: <TextSpan>[
                            new TextSpan(
                                text: "Result Date: ",
                                style: TextStyle(  fontSize: 10,
                                  color: Color(0xFF575757),
                                  fontWeight: FontWeight.w600,
                                  fontFamily: 'Poppins',)),
                            new TextSpan(
                                text:
                                '${AppDateUtils.getDayMonthYearDateFormatted(appointmentDate, isArabic: projectViewModel.isArabic)}',
                                style: TextStyle(
                                    fontWeight: FontWeight.w700, fontSize: 12)),
                          ],
                        ),
                      ),
                    ),
                    // if(isInpatient)
                      Column(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: [
                          if(patient.admissionDate != null && patient.admissionDate.isNotEmpty)
                          Container(
                              child: RichText(
                                  text: new TextSpan(
                                      style: new TextStyle(
                                        fontSize: 10, fontWeight: FontWeight.w600,color: Color(0xFF575757),
                                        fontFamily: 'Poppins',
                                      ),
                                      children: <TextSpan>[
                                        new TextSpan(
                                            text: patient.admissionDate == null
                                                ? ""
                                                : TranslationBase.of(context)
                                                .admissionDate +
                                                " : ",
                                            style: TextStyle(fontSize: 10)),
                                        new TextSpan(
                                            text: patient.admissionDate == null
                                                ? ""
                                                : "${AppDateUtils
                                                .getDayMonthYearDateFormatted(
                                                (AppDateUtils
                                                    .getDateTimeFromServerFormat(
                                                    patient.admissionDate
                                                        .toString())))}",
                                            style: TextStyle(
                                              fontWeight: FontWeight.w700,
                                              fontSize: 12,
                                              color: Color(0xFF2E303A),)),
                                      ]))),
                          if (patient.admissionDate != null)
                            Row(
                              children: [
                                AppText(
                                  "${TranslationBase.of(context).numOfDays}: ",
                                    fontSize: 10, fontWeight: FontWeight.w600,color: Color(0xFF575757)
                                ),
                                if(isDischargedPatient &&
                                    patient.dischargeDate != null)
                                  AppText(
                                      "${AppDateUtils
                                          .getDateTimeFromServerFormat(
                                          patient.dischargeDate)
                                          .difference(AppDateUtils
                                          .getDateTimeFromServerFormat(
                                          patient.admissionDate))
                                          .inDays + 1}",
                                    fontWeight: FontWeight.w700,
                                    fontSize: 12,
                                    color: Color(0xFF2E303A),
                                      )
                                else
                                  AppText(
                                      "${DateTime
                                          .now()
                                          .difference(AppDateUtils
                                          .getDateTimeFromServerFormat(
                                          patient.admissionDate))
                                          .inDays + 1}",
                                    fontWeight: FontWeight.w700,
                                    fontSize: 12,
                                    color: Color(0xFF2E303A),),
                              ],
                            ),
                        ],
                      ),
                  ],
                ),
              ),
            ]),
            if(isAppointmentHeader)
              Row(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  Container(
                    width: 30,
                    height: 30,
                    margin: EdgeInsets.only(
                        left: projectViewModel.isArabic ? 10 : 85,
                        right: projectViewModel.isArabic ? 85 : 10,
                        top: 5),
                    decoration: BoxDecoration(
                        shape: BoxShape.rectangle,
                        border: Border(
                          bottom: BorderSide(
                              color: Colors.grey[400], width: 2.5),
                          left: BorderSide(
                              color: Colors.grey[400], width: 2.5),
                        )),
                  ),
                  Expanded(
                    child: Container(
                      margin: EdgeInsets.only(top: 10),
                      child: Row(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: <Widget>[
                          Container(
                            child: LargeAvatar(
                              name: doctorName ?? "",
                              url: profileUrl,
                            ),
                            width: 25,
                            height: 25,
                            margin: EdgeInsets.only(top: 10),
                          ),


                          Expanded(
                            flex: 5,
                            child: Container(
                              margin: EdgeInsets.all(10),
                              child: Column(
                                  crossAxisAlignment: CrossAxisAlignment
                                      .start,
                                  children: <Widget>[
                                    AppText(
                                      '${TranslationBase
                                          .of(context)
                                          .dr}$doctorName',
                                      color: Color(0xFF2E303A),
                                      fontWeight: FontWeight.w700,
                                      fontSize: 12,
                                    ),
                                    if (orderNo != null &&
                                        !isPrescriptions)
                                      Row(
                                        children: <Widget>[
                                          AppText('Order No: ',

                                            fontSize: 10, fontWeight: FontWeight.w600,color: Color(0xFF575757),),
                                          AppText(orderNo ?? '',
                                              fontSize: 12)
                                        ],
                                      ),
                                    if (invoiceNO != null &&
                                        !isPrescriptions)
                                      Row(
                                        children: <Widget>[
                                          AppText('Invoice: ',
                                            fontSize: 10, fontWeight: FontWeight.w600,color: Color(0xFF575757),),
                                          AppText(invoiceNO ?? "",
                                              fontSize: 12)
                                        ],
                                      ),
                                    if (branch != null)
                                      Row(
                                        children: [
                                          AppText('Branch: ',
                                            fontSize: 10, fontWeight: FontWeight.w600,color: Color(0xFF575757),),
                                          AppText(branch ?? '',
                                              fontSize: 12)
                                        ],
                                      ),

                                    if (clinic != null)
                                      Row(
                                        children: [
                                          AppText('Clinic: ',
                                            fontSize: 10, fontWeight: FontWeight.w600,color: Color(0xFF575757),),
                                          AppText(clinic ?? '',
                                              fontSize: 12)
                                        ],
                                      ),
                                    if (isMedicalFile &&
                                        episode != null)
                                      Row(
                                        children: [
                                          AppText('Episode: ',
                                            fontSize: 10, fontWeight: FontWeight.w600,color: Color(0xFF575757),),
                                          AppText(episode ?? '',
                                              fontSize: 12)
                                        ],
                                      ),
                                    if (isMedicalFile &&
                                        visitDate != null)
                                      Row(
                                        children: [
                                          AppText('Visit Date: ',
                                            fontSize: 10, fontWeight: FontWeight.w600,color: Color(0xFF575757),),
                                          AppText(visitDate ?? '',
                                              fontSize: 12)
                                        ],
                                      ),
                                    if (!isMedicalFile)
                                      Row(

                                        children: <Widget>[
                                          AppText(
                                            !isPrescriptions
                                                ? 'Result Date:'
                                                : 'Prescriptions Date ',
                                              fontSize: 10, fontWeight: FontWeight.w600,color: Color(0xFF575757),
                                          ),
                                          AppText(
                                            '${AppDateUtils
                                                .getDayMonthYearDateFormatted(
                                                appointmentDate,
                                                isArabic: projectViewModel
                                                    .isArabic)}',
                                            fontSize: 12,
                                          )
                                        ],
                                      )
                                  ]),
                            ),
                          ),
                        ],
                      ),
                    ),
                  ),
                ],
              )
          ],
        ),
      ),
    );
  }
  @override
  Size get preferredSize =>
      Size(double.maxFinite, height == 0
          ? isInpatient ? (isFromLabResult?200:170) : isAppointmentHeader ? 290 : 170
          : height);
}
