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/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';

class PatientCard extends StatelessWidget {
  final PatiantInformtion patientInfo;
  final Function onTap;
  final String patientType;
  final String arrivalType;
  final bool isInpatient;
  const PatientCard(
      {Key key,
      this.patientInfo,
      this.onTap,
      this.patientType,
      this.arrivalType,
      this.isInpatient})
      : super(key: key);
  @override
  Widget build(BuildContext context) {
    return Container(
        width: SizeConfig.screenWidth * 0.9,
        margin: EdgeInsets.all(6),
        padding: EdgeInsets.only(left: 0, right: 5, bottom: 5, top: 5),
        decoration: BoxDecoration(
          borderRadius: BorderRadius.circular(15),
          color: Colors.white,
        ),
        child: Stack(children: [
          if (isInpatient)
            Container(
                height: MediaQuery.of(context).size.height * .20,
                width: 5,
                decoration: BoxDecoration(
                  borderRadius: BorderRadius.only(
                      topLeft: Radius.circular(10),
                      bottomLeft: Radius.circular(10)),
                  color: patientInfo.patientStatusType == 43
                      ? Colors.green[500]
                      : Colors.red[800],
                )),
          Container(
              padding: EdgeInsets.only(left: 10, right: 0, bottom: 0),
              child: InkWell(
                child: Column(
                  children: [
                    SizedBox(
                      height: 10,
                    ),
                    !isInpatient
                        ? Padding(
                            padding: EdgeInsets.only(left: 12.0),
                            child: Row(
                              mainAxisAlignment: MainAxisAlignment.spaceBetween,
                              children: [
                                patientInfo.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,
                                      ),
                                this.arrivalType == '1'
                                    ? AppText(
                                        patientInfo.startTime != null
                                            ? patientInfo.startTime
                                            : patientInfo.startTimes,
                                        fontFamily: 'Poppins',
                                        fontWeight: FontWeight.w600,
                                      )
                                    : patientInfo.arrivedOn != null
                                        ? AppText(
                                            DateUtils.getDayMonthYearDateFormatted(DateUtils.convertStringToDate(
                                              patientInfo.arrivedOn,
                                            )),
                                            fontFamily: 'Poppins',
                                            fontWeight: FontWeight.w600,
                                          )
                                        : SizedBox()
                              ],
                            ))
                        : SizedBox(),
                    Padding(
                        padding: EdgeInsets.only(left: 12.0),
                        child: Row(
                          mainAxisAlignment: MainAxisAlignment.spaceBetween,
                          children: [
                            Row(children: [
                              Container(
                                width: 170,
                                child: AppText(
                                  (Helpers.capitalize(patientInfo.firstName) +
                                      " " +
                                      Helpers.capitalize(patientInfo.lastName)),
                                  fontSize: 16,
                                  fontWeight: FontWeight.bold,
                                  fontFamily: 'Poppins',
                                  textOverflow: TextOverflow.ellipsis,
                                ),
                              ),
                              patientInfo.gender == 1
                                  ? Icon(
                                      DoctorApp.male_2,
                                      color: Colors.blue,
                                    )
                                  : Icon(
                                      DoctorApp.female_1,
                                      color: Colors.pink,
                                    ),
                            ]),
                            Row(
                              children: [
                                AppText(
                                  patientInfo.nationalityName != null
                                      ? patientInfo.nationalityName.trim()
                                      : patientInfo.nationality != null
                                          ? patientInfo.nationality.trim()
                                          : patientInfo.nationalityId != null
                                              ? patientInfo.nationalityId
                                              : "",
                                  fontWeight: FontWeight.bold,
                                  fontSize: 14,
                                  textOverflow: TextOverflow.ellipsis,
                                ),
                                patientInfo.nationality != null ||
                                        patientInfo.nationalityId != null
                                    ? ClipRRect(
                                        borderRadius:
                                            BorderRadius.circular(20.0),
                                        child: Image.network(
                                          patientInfo.nationalityFlagURL != null
                                              ? patientInfo.nationalityFlagURL
                                              : '',
                                          height: 25,
                                          width: 30,
                                          errorBuilder: (BuildContext context,
                                              Object exception,
                                              StackTrace stackTrace) {
                                            return AppText(
                                              'No Image',
                                              fontSize: 10,
                                            );
                                          },
                                        ))
                                    : SizedBox()
                              ],
                            )
                          ],
                        )),
                    Row(children: <Widget>[
                      Column(
                        mainAxisAlignment: MainAxisAlignment.start,
                        children: <Widget>[
                          Padding(
                            padding: EdgeInsets.only(left: 12.0),
                            child: Container(
                              width: 60,
                              height: 60,
                              child: Image.asset(
                                patientInfo.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: [
                            Container(
                              child: RichText(
                                text: new TextSpan(
                                  style: new TextStyle(
                                      fontSize: 2.0 * SizeConfig.textMultiplier,
                                      color: Colors.black),
                                  children: <TextSpan>[
                                    new TextSpan(
                                        text: TranslationBase.of(context)
                                            .fileNumber,
                                        style: TextStyle(
                                            fontSize: 14,
                                            fontFamily: 'Poppins')),
                                    new TextSpan(
                                        text: patientInfo.patientId.toString(),
                                        style: TextStyle(
                                            fontWeight: FontWeight.w700,
                                            fontFamily: 'Poppins',
                                            fontSize: 15)),
                                  ],
                                ),
                              ),
                            ),
                            if (isInpatient)
                              Container(
                                child: RichText(
                                  text: new TextSpan(
                                    style: new TextStyle(
                                      fontSize: 2.0 * 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(patientInfo.dateofBirth, context)}",
                                          style: TextStyle(
                                              fontWeight: FontWeight.w700,
                                              fontSize: 15)),
                                    ],
                                  ),
                                ),
                              ),
                            if (isInpatient )
                              Container(
                                  child: RichText(
                                      text: new TextSpan(
                                          style: new TextStyle(
                                            fontSize:
                                                2.0 * SizeConfig.textMultiplier,
                                            color: Colors.black,
                                            fontFamily: 'Poppins',
                                          ),
                                          children: <TextSpan>[
                                    new TextSpan(
                                        text: patientInfo.admissionDate == null
                                            ? ""
                                            : TranslationBase.of(context)
                                                    .admissionDate +
                                                " : ",
                                        style: TextStyle(fontSize: 14)),
                                    new TextSpan(
                                        text: patientInfo.admissionDate == null
                                            ? ""
                                            : "${DateUtils.convertDateFromServerFormat(patientInfo.admissionDate.toString(), 'yyyy-MM-dd')}",
                                        style: TextStyle(
                                            fontWeight: FontWeight.w700,
                                            fontSize: 15)),
                                  ]))),
                            if (patientInfo.admissionDate != null)
                              Row(
                                children: [
                                  AppText(
                                    "${TranslationBase.of(context).numOfDays}: ",
                                    fontSize: 15,
                                  ),
                                  AppText(
                                      "${DateTime.now().difference(DateUtils.getDateTimeFromServerFormat(patientInfo.admissionDate)).inDays + 1}",
                                      fontSize: 15,
                                      fontWeight: FontWeight.w700),
                                ],
                              ),
                            // Container(
                            //   child: Row(
                            //     crossAxisAlignment: CrossAxisAlignment.start,
                            //     mainAxisAlignment: MainAxisAlignment.start,
                            //     children: <Widget>[
                            //       Expanded(
                            //         child: AppText(
                            //           TranslationBase.of(context).noOfDays +
                            //               " : ",
                            //           fontSize: 14,
                            //         ),
                            //       ),
                            //       AppText(
                            //         patientInfo.days,
                            //         color: Colors.white,
                            //         fontSize: 1.5 * SizeConfig.textMultiplier,
                            //         textAlign: TextAlign.center,
                            //         fontWeight: FontWeight.bold,
                            //       ),
                            //       SizedBox(
                            //         height: 0.5,
                            //       )
                            //     ],
                            //   ),
                            //   margin: EdgeInsets.only(
                            //     top: 8,
                            //   ),
                            // ),
                            //if (SERVICES_PATIANT2[int.parse(patientType)] ==
                            //  "List_MyOutPatient")
                            // Container(
                            //   child: Row(
                            //     crossAxisAlignment: CrossAxisAlignment.start,
                            //     mainAxisAlignment: MainAxisAlignment.start,
                            //     children: <Widget>[
                            //       AppText(
                            //         TranslationBase.of(context)
                            //                 .appointmentDate +
                            //             " : ",
                            //         fontSize: 14,
                            //       ),

                            //       // Container(
                            //       // child:
                            //       patientInfo.appointmentDate != null
                            //           ? AppText(
                            //               DateUtils
                            //                   .convertDateFromServerFormat(
                            //                       patientInfo.appointmentDate
                            //                           .toString(),
                            //                       'yyyy-MM-dd'),
                            //               fontSize: 12,
                            //               fontWeight: FontWeight.bold,
                            //             )
                            //           : SizedBox(),
                            //       //),
                            //       patientInfo.startTimes != null
                            //           ?
                            //           //
                            //           //  Container(
                            //           //     // height: 15,
                            //           //     // width: 60,
                            //           //     padding: EdgeInsets.all(5),
                            //           //     decoration: BoxDecoration(
                            //           //       borderRadius:
                            //           //           BorderRadius.circular(25),
                            //           //       color: HexColor("#20A169"),
                            //           //     ),
                            //           //     child:

                            //           AppText(
                            //               ' ' + patientInfo.startTimes,
                            //               fontSize: 11,
                            //               fontWeight: FontWeight.bold,
                            //             )
                            //           //)
                            //           : SizedBox(),
                            //       SizedBox(
                            //         width: 3.5,
                            //       ),
                            //       //,
                            //       SizedBox(
                            //         height: 0.5,
                            //       )
                            //     ],
                            //   ),
                            // margin: EdgeInsets.only(
                            //   top: 8,
                            // ),
                            //)
                          ]))
                    ]),
                    !isInpatient
                        ? Row(
                            mainAxisAlignment: MainAxisAlignment.end,
                            children: [
                                Container(
                                    padding: EdgeInsets.all(4),
                                    child: Image.asset(
                                      patientInfo.appointmentType ==
                                                  'Regular' &&
                                              patientInfo.visitTypeId == 100
                                          ? 'assets/images/livecare.png'
                                          : patientInfo.appointmentType ==
                                                  'Walkin'
                                              ? 'assets/images/walkin.png'
                                              : 'assets/images/booked.png',
                                      height: 25,
                                      width: 35,
                                    )),
                              ])
                        : (isInpatient == true)
                            ? Row(
                                mainAxisAlignment: MainAxisAlignment.end,
                                children: [
                                    Container(
                                        padding: EdgeInsets.all(4),
                                        child: Image.asset(
                                          'assets/images/inpatient.png',
                                          height: 25,
                                          width: 35,
                                        )),
                                  ])
                            : SizedBox()
                  ],
                ),
                onTap: onTap,
              )),
        ]));
  }

  convertDateFormat2(String str) {
    String timeConvert;
    const start = "/Date(";
    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)));
    String 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));
  }
}
