import 'package:cached_network_image/cached_network_image.dart';
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/model/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/core/model/sick_leave/sick_leave_patient_model.dart';
import 'package:doctor_app_flutter/core/service/AnalyticsService.dart';
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/sick_leave_view_model.dart';
import 'package:doctor_app_flutter/locator.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/screens/patient-sick-leave/add_patient_sick_leave_screen.dart';
import 'package:doctor_app_flutter/utils/date-utils.dart';
import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart';
import 'package:doctor_app_flutter/utils/utils.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/add-order/addNewOrder.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/app_bar/patient-profile-app-bar.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/card_with_bg_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/errors/error_message.dart';
import 'package:doctor_app_flutter/widgets/shared/user-guid/CusomRow.dart';
import 'package:doctor_app_flutter/widgets/transitions/slide_up_page.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

class PatientSickLeaveScreen extends StatelessWidget {
  late PatiantInformtion patient;

  @override
  Widget build(BuildContext context) {
    ProjectViewModel projectsProvider = Provider.of<ProjectViewModel>(context);

    final routeArgs = ModalRoute.of(context)!.settings.arguments as Map;
    patient = routeArgs['patient'];
    bool isInpatient = routeArgs['isInpatient'];
    return BaseView<SickLeaveViewModel>(
      onModelReady: (model) async {
        await model.getSickLeaveForPatient(patient);
      },
      builder: (_, model, w) => AppScaffold(
        baseViewModel: model,
        isShowAppBar: true,
        backgroundColor: Colors.grey[100]!,
        appBar: PatientProfileAppBar(
          patient,
          isInpatient: isInpatient,
        ),
        body: Column(children: [
          patient.patientStatusType == 43
              ? Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    Padding(
                      padding: EdgeInsets.all(10),
                      child: Column(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: [
                          SizedBox(
                            height: SizeConfig.isHeightVeryShort
                                ? 30
                                : SizeConfig.isHeightShort
                                    ? 35
                                    : 10,
                          ),
                          if (!projectsProvider.isArabic)
                            AppText(
                              TranslationBase.of(context).patient,
                              fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * (SizeConfig.isWidthLarge ? 3 : 4),
                              fontWeight: FontWeight.w700,
                              letterSpacing: -0.72,
                              color: Color(0xFF2E303A),
                            ),
                          AppText(
                            TranslationBase.of(context).sickLeave,
                            fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * (SizeConfig.isWidthLarge ? 6 : 6),
                            fontWeight: FontWeight.bold,
                            letterSpacing: -1.44,
                            color: Color(0xFF2E303A),
                          ),
                        ],
                      ),
                    ),
                    AddNewOrder(
                        label: TranslationBase.of(context).noSickLeaveApplied,
                        onTap: () async {
                          await locator<AnalyticsService>().logEvent(
                            eventCategory: "Add Sick Leave Screen"
                                "Leave Screen",
                            eventAction: "apply For Sick Leave",
                          );
                          openSickLeave(context, model);
                        }),
                  ],
                )
              : SizedBox(),
          model.getAllSIckLeavePatient.length > 0
              ? Expanded(
                  child: FractionallySizedBox(
                    widthFactor: 0.95,
                    child: ListView.builder(
                        scrollDirection: Axis.vertical,
                        shrinkWrap: true,
                        itemCount: model.getAllSIckLeavePatient.length,
                        itemBuilder: (BuildContext ctxt, int index) {
                          SickLeavePatientModel item = model.getAllSIckLeavePatient[index];
                          return Column(
                            children: [
                              CardWithBgWidget(
                                padding: 0,
                                marginLeft: 10,
                                marginSymmetric: 10,
                                hasBorder: false,
                                bgColor: Colors.black,
                                widget: Container(
                                  color: Colors.white,
                                  padding: EdgeInsets.all(20),
                                  child: InkWell(
                                    child: Column(
                                      children: [
                                        if (item.doctorName != null)
                                          Row(crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, children: [
                                            Expanded(
                                              // width: MediaQuery.of(context).size.width*0.51,
                                              child: AppText(
                                                Utils.capitalize(item.doctorName ?? ""),
                                                fontSize: 18,
                                                color: Color(0xff2e303a),
                                                fontWeight: FontWeight.w700,
                                                fontFamily: 'Poppins',
                                                textOverflow: TextOverflow.ellipsis,
                                              ),
                                            ),
                                          ]),
                                        SizedBox(
                                          height: 10,
                                        ),
                                        Row(
                                          children: [
                                            // ClipRRect(
                                            //   borderRadius: BorderRadius.circular(50.0),
                                            //   child: CachedNetworkImage(
                                            //     imageUrl: item.doctorImageURL ?? "https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown.png",
                                            //     height: 30,
                                            //     width: 30,
                                            //     errorWidget: (context, url, error) => AppText(
                                            //       'No Image',
                                            //       fontSize: 10,
                                            //     ),
                                            //   ),
                                            // ),
                                            SizedBox(
                                              width: 10,
                                            ),
                                            Expanded(
                                              child: Column(
                                                children: [
                                                  CustomRow(
                                                    label: TranslationBase.of(context).daysSickleave,
                                                    labelSize: SizeConfig.getTextMultiplierBasedOnWidth() * 3.3,
                                                    valueSize: SizeConfig.getTextMultiplierBasedOnWidth() * 4,
                                                    value:
                                                        (item.sickLeaveDays.toString() != null && item.sickLeaveDays.toString() != "null") ? item.sickLeaveDays.toString() : item.noOfDays.toString(),
                                                  ),
                                                  CustomRow(
                                                    label: TranslationBase.of(context).startDate + ' ' ?? "",
                                                    labelSize: SizeConfig.getTextMultiplierBasedOnWidth() * 3.3,
                                                    valueSize: SizeConfig.getTextMultiplierBasedOnWidth() * 4,
                                                    value: AppDateUtils.getDayMonthYearDateFormatted(
                                                      item.startDate.contains("/Date(") ? AppDateUtils.convertStringToDate(item.startDate) : DateTime.parse(item.startDate),
                                                    ),
                                                  ),
                                                  CustomRow(
                                                    label: TranslationBase.of(context).endDate + ' ' ?? "",
                                                    labelSize: SizeConfig.getTextMultiplierBasedOnWidth() * 3.3,
                                                    valueSize: SizeConfig.getTextMultiplierBasedOnWidth() * 4,
                                                    value: AppDateUtils.getDayMonthYearDateFormatted(
                                                      item.startDate.contains("/Date(")
                                                          ? AppDateUtils.convertStringToDate(item.endDate ?? "").add(
                                                              Duration(days: item.noOfDays ?? item.sickLeaveDays),
                                                            )
                                                          : DateTime.parse(item.startDate ?? "").add(
                                                              Duration(days: item.noOfDays ?? ""),
                                                            ),
                                                    ),
                                                  ),
                                                ],
                                                crossAxisAlignment: CrossAxisAlignment.start,
                                              ),
                                            ),
                                          ],
                                        ),
                                      ],
                                    ),
                                  ),
                                ),
                              ),
                            ],
                          );
                        }),
                  ),
                )
              : patient.patientStatusType != 43
                  ? ErrorMessage(
                      error: TranslationBase.of(context).noSickLeave,
                    )
                  : SizedBox(),
          SizedBox(
            height: 100,
          )
        ]),
      ),
    );
  }

  openSickLeave(BuildContext context, model) {
    Navigator.push(
      context,
      SlideUpPageRoute(
        fullscreenDialog: true,
        widget: AddPatientSickLeaveScreen(
          appointmentNo: patient.appointmentNo,
          patientMRN: patient.patientMRN,
          patient: patient,
          previousModel: model,
        ),
      ),
    );
  }
}
