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

class PatientProfileHeaderNewDesignAppBar extends StatelessWidget
    with PreferredSizeWidget {
  final PatiantInformtion patient;
  final String patientType;
  final String arrivalType;
  final double height;

  PatientProfileHeaderNewDesignAppBar(
      this.patient, this.patientType, this.arrivalType, {this.height = 0.0});

  @override
  Widget build(BuildContext 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 ? 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: 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(
                                      patient.arrivedOn != null
                                          ? 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 ?? ''),
                                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?? 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: 14)),
                            new TextSpan(
                                text:
                                    "${DateUtils.getAgeByBirthday(patient.patientDetails != null ? patient.patientDetails.dateofBirth??"" : patient.dateofBirth??"", context)}",
                                style: TextStyle(
                                    fontWeight: FontWeight.w700, fontSize: 14)),
                          ],
                        ),
                      ),
                    ),
                  ],
                ),
              ),
            ]),
          ],
        ),
      ),
    );
  }

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

      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??'';
  }

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