import 'package:hmg_patient_app/core/model/prescriptions/Prescriptions.dart';
import 'package:hmg_patient_app/core/model/prescriptions/prescription_report.dart';
import 'package:hmg_patient_app/core/model/prescriptions/prescription_report_inp.dart';
import 'package:hmg_patient_app/core/viewModels/project_view_model.dart';
import 'package:hmg_patient_app/extensions/string_extensions.dart';
import 'package:hmg_patient_app/models/header_model.dart';
import 'package:hmg_patient_app/pages/BookAppointment/widgets/reminder_dialog.dart';
import 'package:hmg_patient_app/pages/medical/prescriptions/pharmacy_for_prescriptions_page.dart';
import 'package:hmg_patient_app/uitl/CalendarUtils.dart';
import 'package:hmg_patient_app/uitl/app_toast.dart';
import 'package:hmg_patient_app/uitl/date_uitl.dart';
import 'package:hmg_patient_app/uitl/gif_loader_dialog_utils.dart';
import 'package:hmg_patient_app/uitl/translations_delegate_base.dart';
import 'package:hmg_patient_app/uitl/utils.dart';
import 'package:hmg_patient_app/uitl/utils_new.dart';
import 'package:hmg_patient_app/widgets/buttons/defaultButton.dart';
import 'package:hmg_patient_app/widgets/new_design/doctor_header.dart';
import 'package:hmg_patient_app/widgets/others/app_scaffold_widget.dart';
import 'package:hmg_patient_app/widgets/show_zoom_image_dialog.dart';
import 'package:hmg_patient_app/widgets/transitions/fade_page.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:jiffy/jiffy.dart';
import 'package:provider/provider.dart';

class PrescriptionDetailsPageINP extends StatelessWidget {
  final PrescriptionReportINP? prescriptionReport;
  final Prescriptions prescriptions;

  PrescriptionDetailsPageINP({Key? key, this.prescriptionReport, required this.prescriptions});

  @override
  Widget build(BuildContext context) {
    ProjectViewModel projectViewModel = Provider.of(context);
    return AppScaffold(
      isShowAppBar: true,
      showNewAppBar: true,
      showNewAppBarTitle: true,
      appBarTitle: TranslationBase.of(context).prescriptions,
      body: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          DoctorHeader(
            headerModel: HeaderModel(
              prescriptions.doctorName!,
              prescriptions.doctorID!,
              prescriptions.doctorImageURL!,
              prescriptions.speciality ?? [""],
              "",
              prescriptions.name!,
              DateUtil.convertStringToDate(prescriptions.appointmentDate!),
              DateUtil.formatDateToTime(DateUtil.convertStringToDate(prescriptions.appointmentDate!)),
              prescriptions.nationalityFlagURL ?? "",
              prescriptions.doctorRate,
              prescriptions.actualDoctorRate,
              prescriptions.noOfPatientsRate,
              "",
            ),
            isNeedToShowButton: false,
          ),
          Expanded(
            child: ListView(
              physics: BouncingScrollPhysics(),
              padding: EdgeInsets.all(21),
              children: [
                Container(
                  padding: EdgeInsets.all(14),
                  decoration: BoxDecoration(
                    color: Colors.white,
                    borderRadius: BorderRadius.all(Radius.circular(10.0)),
                    boxShadow: [
                      BoxShadow(
                        color: Color(0xff000000).withOpacity(.05),
                        //spreadRadius: 5,
                        blurRadius: 27,
                        offset: Offset(0, -3),
                      ),
                    ],
                  ),
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    mainAxisSize: MainAxisSize.min,
                    children: [
                      Row(
                        children: <Widget>[
                          InkWell(
                            child: Stack(
                              alignment: Alignment.center,
                              children: [
                                Container(
                                  child: Image.network(
                                    prescriptionReport!.imageSRCUrl!,
                                    fit: BoxFit.cover,
                                    width: 48,
                                    height: 49,
                                  ),
                                  margin: EdgeInsets.zero,
                                  clipBehavior: Clip.antiAlias,
                                  decoration: cardRadius(2000),
                                ),
                                Container(
                                  child: Icon(
                                    Icons.search,
                                    size: 18,
                                    color: Colors.white,
                                  ),
                                  padding: EdgeInsets.all(6),
                                  decoration: containerRadius(Colors.black.withOpacity(0.3), 200),
                                )
                              ],
                            ),
                            onTap: () {
                              showZoomImageDialog(context, prescriptionReport!.imageSRCUrl!);
                            },
                          ),
                          SizedBox(width: 12),
                          Expanded(
                            child: Text(
                              (prescriptionReport!.itemDescription!.isNotEmpty ? prescriptionReport!.itemDescription : prescriptionReport!.itemDescriptionN ?? '')!.toLowerCase().capitalizeFirstofEach,
                              style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: Color(0xff2E303A), letterSpacing: -0.64),
                            ),
                          )
                        ],
                      ),
                      SizedBox(height: 12),
                      Table(border: TableBorder(horizontalInside: BorderSide(width: 1, color: Colors.black, style: BorderStyle.solid)), children: [
                        TableRow(
                          children: [
                            Utils.tableColumnTitle(TranslationBase.of(context).route, showDivider: false),
                            Utils.tableColumnTitle(TranslationBase.of(context).frequency, showDivider: false),
                            Utils.tableColumnTitle(TranslationBase.of(context).dailyDoses, showDivider: false),
                            Utils.tableColumnTitle(TranslationBase.of(context).duration, showDivider: false)
                          ],
                        ),
                        TableRow(
                          children: [
                            Utils.tableColumnValue(prescriptionReport?.routeN ?? '', isLast: true, mProjectViewModel: projectViewModel),
                            Utils.tableColumnValue(prescriptionReport?.frequencyN ?? '', isLast: true, mProjectViewModel: projectViewModel),
                            Utils.tableColumnValue(prescriptionReport?.doseDailyQuantity.toString() ?? '', isLast: true, mProjectViewModel: projectViewModel),
                            Utils.tableColumnValue(prescriptionReport?.days.toString() ?? '', isLast: true, mProjectViewModel: projectViewModel),
                          ],
                        ),
                      ]),
                      Text(
                        TranslationBase.of(context).remarks,
                        style: TextStyle(fontSize: 12, fontWeight: FontWeight.w600, color: Color(0xff2E303A), letterSpacing: -0.48),
                      ),
                      Text(
                        prescriptionReport!.remarks!,
                        style: TextStyle(fontSize: 12, fontWeight: FontWeight.w600, color: Color(0xff575757), letterSpacing: -0.4, height: 16 / 10),
                      ),
                    ],
                  ),
                ),
              ],
            ),
          ),
          Container(
            color: Colors.white,
            padding: EdgeInsets.only(top: 16, bottom: 16, right: 21, left: 21),
            child: Row(
              mainAxisSize: MainAxisSize.min,
              children: [
                Expanded(
                  child: DefaultButton(
                    TranslationBase.of(context).availability,
                    () {
                      Navigator.push(
                        context,
                        FadePage(
                          page: PharmacyForPrescriptionsPage(
                            itemID: prescriptionReport!.itemID,
                            prescriptionReport: PrescriptionReport.fromJson(prescriptionReport!.toJson()),
                          ),
                        ),
                      );
                    },
                    iconData: Icons.location_on,
                    color: Color(0xff359846),
                  ),
                ),
                SizedBox(width: 10),
                Expanded(
                  child: DefaultButton(
                    TranslationBase.of(context).addReminder,
                    () {
                      DateTime startDate = DateTime.now();
                      DateTime endDate = DateTime(startDate.year, startDate.month, startDate.day + prescriptionReport!.days!);

                      showReminderDialog(
                        context,
                        endDate,
                        "",
                        prescriptionReport!.itemID.toString(),
                        "",
                        "",
                        title: "${prescriptionReport!.itemDescriptionN} Prescription Reminder",
                        description: "${prescriptionReport!.itemDescriptionN} ${prescriptionReport!.frequencyN} ${prescriptionReport!.routeN} ",
                        onSuccess: () {
                          AppToast.showSuccessToast(message: TranslationBase.of(context).reminderSuccess);
                        },
                        onMultiDateSuccess: (int selectedIndex) {
                          setCalender(context, prescriptionReport!.itemID.toString(), selectedIndex);
                        },
                      );
                      return;
                    },
                    iconData: Icons.notifications_active,
                    color: Color(0xffD02127),
                    fontSize: 13.0,
                    //textColor: Color(0xff2B353E),
                  ),
                ),
              ],
            ),
          ),
        ],
      ),
    );
  }

  setCalender(BuildContext context, String eventId, int reminderIndex) async {
    CalendarUtils calendarUtils = await CalendarUtils.getInstance();
    int frequencyNumber = int.parse(prescriptionReport!.frequency!);

    DateTime actualDate = DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day, 8, 0); //Time will start at 8:00 AM from starting date
    if (frequencyNumber == null) frequencyNumber = 1; //Some time frequency number is null so by default will be 2

    int remainingDays =
        prescriptionReport!.days! - (Jiffy.parseFromDateTime(DateTime.now()).diff(Jiffy.parseFromDateTime(DateUtil.convertStringToDate(prescriptionReport!.orderDate!)), unit: Unit.day).toInt());

    GifLoaderDialogUtils.showMyDialog(context);

    for (int i = 0; i < remainingDays; i++) {
      //event for number of days.
      for (int j = 0; j < frequencyNumber; j++) {
        // event for number of times per day.
        if (j != 0) {
          actualDate.add(new Duration(hours: 8)); // 8 hours addition for daily dose.
        }
        //Time subtraction from actual reminder time. like before 30, or 1 hour.
        if (reminderIndex == 0) {
          // Before 30 mints
          actualDate = Jiffy.parseFromDateTime(actualDate).subtract(minutes: 30).dateTime;
          // dateTime.add(new Duration(minutes: -30));
        } else if (reminderIndex == 1) {
          // Before 1 hour
          // dateTime.add(new Duration(minutes: -60));
          actualDate = Jiffy.parseFromDateTime(actualDate).subtract(hours: 1).dateTime;
        } else if (reminderIndex == 2) {
          // Before 1 hour and 30 mints
          // dateTime.add(new Duration(minutes: -90));
          actualDate = Jiffy.parseFromDateTime(actualDate).subtract(hours: 1, minutes: 30).dateTime;
        } else if (reminderIndex == 3) {
          // Before 2 hours
          // dateTime.add(new Duration(minutes: -120));
          actualDate = Jiffy.parseFromDateTime(actualDate).subtract(hours: 2).dateTime;
        }
        calendarUtils
            .createOrUpdateEvent(
              title: "${prescriptionReport!.itemDescriptionN} Prescription Reminder",
              description: "${prescriptionReport!.itemDescriptionN} ${prescriptionReport!.frequencyN} ${prescriptionReport!.routeN} ",
              scheduleDateTime: actualDate,
              eventId: eventId + (i.toString() + j.toString()), //event id with  varitions
            )
            .then((value) {});
        actualDate = DateTime(actualDate.year, actualDate.month, actualDate.day, 8, 0);
      }
      actualDate = Jiffy.parseFromDateTime(actualDate).add(days: 1).dateTime;
      print(actualDate);
    }
    AppToast.showSuccessToast(message: TranslationBase.of(context).reminderSuccess);
    GifLoaderDialogUtils.hideDialog(context);
  }
}
