import 'package:doctor_app_flutter/config/config.dart';
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:hexcolor/hexcolor.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher.dart';

import 'large_avatar.dart';

class PatientProfileHeaderWhitAppointmentAppBar extends StatelessWidget
    with PreferredSizeWidget {
  final PatiantInformtion patient;
  final String patientType;
  final String arrivalType;
  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 vistDate;

  final String clinic;
  PatientProfileHeaderWhitAppointmentAppBar(
      {this.patient,
      this.patientType,
      this.arrivalType,
      this.doctorName,
      this.branch,
      this.appointmentDate,
      this.profileUrl,
      this.invoiceNO,
      this.orderNo,
      this.isPrescriptions = false,
      this.clinic,
      this.isMedicalFile = false,
      this.episode,
      this.vistDate});

  @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, top: 5),
      decoration: BoxDecoration(
        color: Colors.white,
      ),
      //height: 300,
      child: Container(
        padding: EdgeInsets.only(left: 10, right: 10, bottom: 10),
        margin: EdgeInsets.only(top: 50),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Container(
              padding: EdgeInsets.only(left: 12.0),
              child: Row(children: [
                IconButton(
                  icon: Icon(Icons.arrow_back_ios),
                  color: Colors.black, //Colors.black,
                  onPressed: () => Navigator.pop(context),
                ),
                Expanded(
                  child: AppText(
                    patient.firstName != null
                        ? (Helpers.capitalize(patient.firstName) +
                            " " +
                            Helpers.capitalize(patient.lastName))
                        : Helpers.capitalize(patient.patientDetails.fullName),
                    fontSize: SizeConfig.textMultiplier * 2.2,
                    fontWeight: FontWeight.bold,
                    fontFamily: 'Poppins',
                  ),
                ),
                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: [
                    SERVICES_PATIANT2[int.parse(patientType)] ==
                            "patientArrivalList"
                        ? 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,
                                    ),
                              arrivalType == '1' || patient.arrivedOn == null
                                  ? AppText(
                                      patient.startTime != null
                                          ? patient.startTime
                                          : '',
                                      fontFamily: 'Poppins',
                                      fontWeight: FontWeight.w600,
                                    )
                                  : AppText(
                                      DateUtils.convertStringToDateFormat(
                                          patient.arrivedOn,
                                          'MM-dd-yyyy HH:mm'),
                                      fontFamily: 'Poppins',
                                      fontWeight: FontWeight.w600,
                                    )
                            ],
                          ))
                        : SizedBox(),
                    if (SERVICES_PATIANT2[int.parse(patientType)] ==
                        "List_MyOutPatient")
                      Container(
                        child: Row(
                          mainAxisAlignment: MainAxisAlignment.start,
                          children: <Widget>[
                            AppText(
                              TranslationBase.of(context).appointmentDate +
                                  " : ",
                              fontSize: 14,
                            ),
                            patient.startTime != null
                                ? Container(
                                    height: 15,
                                    width: 60,
                                    decoration: BoxDecoration(
                                      borderRadius: BorderRadius.circular(25),
                                      color: HexColor("#20A169"),
                                    ),
                                    child: AppText(
                                      patient.startTime ?? "",
                                      color: Colors.white,
                                      fontSize: 1.5 * SizeConfig.textMultiplier,
                                      textAlign: TextAlign.center,
                                      fontWeight: FontWeight.bold,
                                    ),
                                  )
                                : SizedBox(),
                            SizedBox(
                              width: 3.5,
                            ),
                            Container(
                              child: AppText(
                                convertDateFormat2(
                                    patient.appointmentDate.toString() ?? ''),
                                fontSize: 1.5 * SizeConfig.textMultiplier,
                                fontWeight: FontWeight.bold,
                              ),
                            ),
                            SizedBox(
                              height: 0.5,
                            )
                          ],
                        ),
                        margin: EdgeInsets.only(
                          top: 8,
                        ),
                      ),
                    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: 12, fontFamily: 'Poppins')),
                              new TextSpan(
                                  text: patient.patientId.toString(),
                                  style: TextStyle(
                                      fontWeight: FontWeight.w700,
                                      fontFamily: 'Poppins',
                                      fontSize: 14)),
                            ],
                          ),
                        ),
                        Row(
                          children: [
                            AppText(
                              patient.nationalityName ??
                                  patient.nationality ??
                                  "",
                              fontWeight: FontWeight.bold,
                              fontSize: 12,
                            ),
                            patient.nationality != 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: 14)),
                            new TextSpan(
                                text:
                                    "${DateUtils.getAgeByBirthday(patient.patientDetails != null ? patient.patientDetails.dateofBirth : patient.dateofBirth, context)}",
                                style: TextStyle(
                                    fontWeight: FontWeight.w700, fontSize: 14)),
                          ],
                        ),
                      ),
                    ),
                  ],
                ),
              ),
            ]),
            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: Colors.black,
                                    fontWeight: FontWeight.w600,
                                    fontSize: 9,
                                  ),
                                  if (orderNo != null && !isPrescriptions)
                                    Row(
                                      children: <Widget>[
                                        AppText('Order No: ',
                                            color: Colors.grey[800],
                                            fontSize: 12),
                                        AppText(orderNo ?? '', fontSize: 12)
                                      ],
                                    ),
                                  if (invoiceNO != null && !isPrescriptions)
                                    Row(
                                      children: <Widget>[
                                        AppText('Invoice: ',
                                            color: Colors.grey[800],
                                            fontSize: 12),
                                        AppText(invoiceNO, fontSize: 12)
                                      ],
                                    ),
                                  if (branch != null)
                                    Row(
                                      children: [
                                        AppText('Branch: ',
                                            color: Colors.grey[800],
                                            fontSize: 12),
                                        AppText(branch ?? '', fontSize: 12)
                                      ],
                                    ),

                                    if (clinic != null)
                                      Row(
                                        children: [
                                          AppText('Clinic: ',
                                              color: Colors.grey[800],
                                              fontSize: 12),
                                          AppText(clinic ?? '', fontSize: 12)
                                        ],
                                      ),
                                  if (isMedicalFile && episode != null)
                                    Row(
                                      children: [
                                        AppText('Episode: ',
                                            color: Colors.grey[800],
                                            fontSize: 12),
                                        AppText(episode ?? '', fontSize: 12)
                                      ],
                                    ),
                                  if (isMedicalFile && vistDate != null)
                                    Row(
                                      children: [
                                        AppText('Visit Date: ',
                                            color: Colors.grey[800],
                                            fontSize: 12),
                                        AppText(vistDate ?? '', fontSize: 12)
                                      ],
                                    ),
                                  if (!isMedicalFile)
                                    Row(
                                      children: <Widget>[
                                        Expanded(
                                          child: AppText(
                                            !isPrescriptions
                                                ? 'Result Date: '
                                                : 'Prescriptions Date ',
                                            color: Colors.grey[800],
                                            fontSize: 12,
                                          ),
                                        ),
                                        AppText(
                                          '${DateUtils.getDayMonthYearDateFormatted(appointmentDate, isArabic: projectViewModel.isArabic)}',
                                          fontSize: 14,
                                        )
                                      ],
                                    )
                                ]),
                          ),
                        ),
                      ],
                    ),
                  ),
                ),
              ],
            )
          ],
        ),
      ),
    );
  }

  convertDateFormat2(String str) {
    String newDate = "";
    const start = "/Date(";
    const end = "+0300)";

    if (str.isNotEmpty) {
      final startIndex = str.indexOf(start);
      final endIndex = str.indexOf(end, startIndex + start.length);

      var date = new DateTime.fromMillisecondsSinceEpoch(
          int.parse(str.substring(startIndex + start.length, endIndex)));
      newDate = date.year.toString() +
          "/" +
          date.month.toString().padLeft(2, '0') +
          "/" +
          date.day.toString().padLeft(2, '0');
    }

    return newDate.toString();
  }

  isToday(date) {
    DateTime tempDate = new DateFormat("yyyy-MM-dd").parse(date);
    return DateFormat("yyyy-MM-dd").format(tempDate) ==
        DateFormat("yyyy-MM-dd").format(DateTime.now());
  }

  myBoxDecoration() {
    return BoxDecoration(
        border: Border(
          top: BorderSide(
            color: Colors.green,
            width: 5,
          ),
        ),
        borderRadius: BorderRadius.circular(10));
  }

  @override
  Size get preferredSize => Size(double.maxFinite, 310);
}
