import 'package:hmg_patient_app/core/viewModels/project_view_model.dart';
import 'package:hmg_patient_app/models/Appointments/DoctorListResponse.dart';
import 'package:hmg_patient_app/models/Appointments/OBGyneProcedureListResponse.dart';
import 'package:hmg_patient_app/pages/BookAppointment/widgets/DoctorView.dart';
import 'package:hmg_patient_app/theme/colors.dart';
import 'package:hmg_patient_app/uitl/translations_delegate_base.dart';
import 'package:hmg_patient_app/uitl/utils_new.dart';
import 'package:hmg_patient_app/widgets/others/app_expandable_notifier.dart';
import 'package:hmg_patient_app/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:provider/provider.dart';

class SearchResultsByRegion extends StatelessWidget {
  List<DoctorList> doctorsList = [];
  RegionList patientDoctorAppointmentListHospital;
  bool isLiveCareAppointment;
  bool isObGyneAppointment;
  bool isDoctorNameSearch;
  OBGyneProcedureListResponse? obGyneProcedureListResponse;
  bool isDoctorSearchResult;

  SearchResultsByRegion(
      {required this.doctorsList,
      required this.patientDoctorAppointmentListHospital,
      this.isObGyneAppointment = false,
      this.isDoctorNameSearch = false,
      required this.isLiveCareAppointment,
      required this.isDoctorSearchResult,
      this.obGyneProcedureListResponse});

  @override
  Widget build(BuildContext context) {
    return AppScaffold(
      appBarTitle: TranslationBase.of(context).bookAppo,
      isShowDecPage: false,
      isShowAppBar: true,
      showNewAppBarTitle: true,
      showNewAppBar: true,
      backgroundColor: CustomColors.appBackgroudGrey2Color,
      body: patientDoctorAppointmentListHospital
                  .registeredDoctorMap?.isNotEmpty ==
              true
          ? ListView.separated(
              addAutomaticKeepAlives: true,
              physics: BouncingScrollPhysics(),
              separatorBuilder: (context, index) {
                return Material(
                  color: Color(0xFFf5f5f5),
                  child: SizedBox(
                    height: 12,
                  ),
                );
              },
              itemBuilder: (context, index) {
                String key = patientDoctorAppointmentListHospital
                        .registeredDoctorMap?.keys
                        .toList()[index] ??
                    '';

                return AppExpandableNotifier(
                    paddingValue: 10,
                    applyBackgroundToOnlyHeader: true,
                    completeHeaderColor: CustomColors.appBackgroudGrey2Color,
                    headerWidget: RegionTitle(
                      title: key,
                      hmcCount:
                          "${patientDoctorAppointmentListHospital.registeredDoctorMap?[key]?.hmcSize ?? 0}",
                      hmgCount:
                          "${patientDoctorAppointmentListHospital.registeredDoctorMap?[key]?.hmgSize ?? 0}",
                    ),
                    showDropDownIconWithCustomHeader: true,
                    isTitleSingleLine: false,
                    isDoctorSearchResult: isDoctorSearchResult,
                    widgetColor: Color(0xFFF8F8F8),
                    bodyWidget: Column(
                      children: [
                        Padding(
                          padding: const EdgeInsets.all(8.0),
                          child: AppExpandableNotifier(
                            paddingValue: 8,
                            applyBackgroundColor: false,
                            applyBackgroundToOnlyHeader: true,
                            completeHeaderColor: Colors.white,
                            headerRadius: BorderRadius.circular(16),
                            headerWidget: HospitalTitle(
                              iconUrl: 'assets/images/svg/HMG.svg',
                              title: TranslationBase.of(context).hmgHospital,
                              isHMC: false,
                              itemCount:
                                  "${patientDoctorAppointmentListHospital.registeredDoctorMap?[key]?.hmgSize ?? 0}",
                            ),
                            showDropDownIconWithCustomHeader: true,
                            bodyWidget: HospitalBodyWidget(
                              patientDoctorAppointmentListHospital:
                                  patientDoctorAppointmentListHospital
                                      .registeredDoctorMap?[key]?.hmgDoctorList,
                              isLiveCareAppointment: isLiveCareAppointment,
                              isObGyneAppointment: isObGyneAppointment,
                              isDoctorNameSearch: isDoctorNameSearch,
                              isDoctorSearchResult: isDoctorSearchResult,
                            ),
                          ),
                        ),
                        Padding(
                          padding: const EdgeInsets.only(
                              bottom: 8.0, left: 8, right: 8),
                          child: AppExpandableNotifier(
                            paddingValue: 8,
                            applyBackgroundColor: false,
                            applyBackgroundToOnlyHeader: true,
                            completeHeaderColor: Colors.white,
                            headerRadius: BorderRadius.circular(16),
                            headerWidget: HospitalTitle(
                              iconUrl: 'assets/images/svg/HMC.svg',
                              title: TranslationBase.of(context).hmcHospital,
                              isHMC: true,
                              itemCount:
                                  "${patientDoctorAppointmentListHospital.registeredDoctorMap?[key]?.hmcSize ?? 0}",
                            ),
                            showDropDownIconWithCustomHeader: true,
                            bodyWidget: HospitalBodyWidget(
                              patientDoctorAppointmentListHospital:
                                  patientDoctorAppointmentListHospital
                                      .registeredDoctorMap?[key]?.hmcDoctorList,
                              isLiveCareAppointment: isLiveCareAppointment,
                              isObGyneAppointment: isObGyneAppointment,
                              isDoctorNameSearch: isDoctorNameSearch,
                              isDoctorSearchResult: isDoctorSearchResult,
                            ),
                          ),
                        ),
                      ],
                    ));
                // return AppExpandableNotifier(
                //   title: (patientDoctorAppointmentListHospital[index].distanceInKMs != "0")
                //       ? patientDoctorAppointmentListHospital[index].filterName! + " - " + patientDoctorAppointmentListHospital[index].distanceInKMs! + " " + TranslationBase.of(context).km
                //       : patientDoctorAppointmentListHospital[index].filterName,
                //   projectTitleTop: patientDoctorAppointmentListHospital[index].projectTopName,
                //   projectTitleBottom: (patientDoctorAppointmentListHospital[index].distanceInKMs != "0")
                //       ? patientDoctorAppointmentListHospital[index].projectBottomName.toString() +
                //           " - " +
                //           patientDoctorAppointmentListHospital[index].distanceInKMs! +
                //           " " +
                //           TranslationBase.of(context).km
                //       : patientDoctorAppointmentListHospital[index].projectBottomName.toString(),
                //   isTitleSingleLine: false,
                //   isDoctorSearchResult: isDoctorSearchResult,
                //   isExpand: patientDoctorAppointmentListHospital.length == 1 ? true : false,
                //   bodyWidget: ListView.separated(
                //       shrinkWrap: true,
                //       physics: NeverScrollableScrollPhysics(),
                //       padding: EdgeInsets.only(bottom: 10, top: 10, left: 21, right: 21),
                //       itemBuilder: (context, _index) {
                //         final doctor = patientDoctorAppointmentListHospital[index].patientDoctorAppointmentList![_index];
                //         return DoctorView(
                //             doctor: doctor,
                //             isLiveCareAppointment: isLiveCareAppointment,
                //             isObGyneAppointment: isObGyneAppointment,
                //             isDoctorNameSearch: isDoctorNameSearch,
                //             obGyneProcedureListResponse: obGyneProcedureListResponse,
                //             isShowDate: false,
                //             onTap: () {
                //               context.read<ProjectViewModel>().analytics.appointment.book_appointment_select_doctor(appointment_type: 'regular', doctor: doctor);
                //             });
                //       },
                //       separatorBuilder: (context, index) => SizedBox(height: 14),
                //       itemCount: patientDoctorAppointmentListHospital[index].patientDoctorAppointmentList!.length),
                // );
              },
              itemCount: patientDoctorAppointmentListHospital
                      .registeredDoctorMap?.length ??
                  0,
            )
          : getNoDataWidget(context),
    );
  }
}

class HospitalBodyWidget extends StatelessWidget {
  final List<PatientDoctorAppointmentList>?
      patientDoctorAppointmentListHospital;
  final bool isLiveCareAppointment;
  final bool isObGyneAppointment;
  final bool isDoctorNameSearch;
  final bool isDoctorSearchResult;
  final OBGyneProcedureListResponse? obGyneProcedureListResponse;

  const HospitalBodyWidget({
    super.key,
    this.patientDoctorAppointmentListHospital,
    required this.isLiveCareAppointment,
    required this.isObGyneAppointment,
    required this.isDoctorNameSearch,
    required this.isDoctorSearchResult,
    this.obGyneProcedureListResponse,
  });

  @override
  Widget build(BuildContext context) {
    return ListView.separated(
      addAutomaticKeepAlives: true,
      shrinkWrap: true,
      physics: NeverScrollableScrollPhysics(),
      itemCount: patientDoctorAppointmentListHospital?.length ?? 0,
      separatorBuilder: (context, index) {
        return Container(
          height: 12,
          margin: EdgeInsets.only(left: 21, right: 21),
        );
      },
      itemBuilder: (context, index) {
        return AppExpandableNotifier(
          applyBackgroundColor: false,
          widgetColor: CustomColors.appBackgroudGrey2Color,
          title: (patientDoctorAppointmentListHospital?[index].distanceInKMs !=
                  "0")
              ? patientDoctorAppointmentListHospital![index].filterName! +
                  " - " +
                  patientDoctorAppointmentListHospital![index].distanceInKMs! +
                  " " +
                  TranslationBase.of(context).km
              : patientDoctorAppointmentListHospital![index].filterName,
          projectTitleTop:
              patientDoctorAppointmentListHospital![index].projectTopName,
          projectTitleBottom: (patientDoctorAppointmentListHospital![index]
                      .distanceInKMs !=
                  "0")
              ? patientDoctorAppointmentListHospital![index]
                      .projectBottomName
                      .toString() +
                  " - " +
                  patientDoctorAppointmentListHospital![index].distanceInKMs! +
                  " " +
                  TranslationBase.of(context).km
              : patientDoctorAppointmentListHospital![index]
                  .projectBottomName
                  .toString(),
          isTitleSingleLine: false,
          isDoctorSearchResult: isDoctorSearchResult,
          isExpand:
              patientDoctorAppointmentListHospital?.length == 1 ? true : false,
          bodyWidget: ListView.separated(
              shrinkWrap: true,
              physics: NeverScrollableScrollPhysics(),
              padding:
                  EdgeInsets.only(bottom: 10, top: 10, left: 21, right: 21),
              itemBuilder: (context, _index) {
                // print("the index of patientDoctorAppointmentList is ${_index}");
                // print("the index of parent is  ${index}");
                final doctor = patientDoctorAppointmentListHospital![index]
                    .patientDoctorAppointmentList![_index];
                // print('the doctor is ${doctor.toJson()}');
                return DoctorView(
                    doctor: doctor,
                    isLiveCareAppointment: isLiveCareAppointment,
                    isObGyneAppointment: isObGyneAppointment,
                    isDoctorNameSearch: isDoctorNameSearch,
                    obGyneProcedureListResponse: obGyneProcedureListResponse,
                    isShowDate: false,
                    onTap: () {
                      context
                          .read<ProjectViewModel>()
                          .analytics
                          .appointment
                          .book_appointment_select_doctor(
                              appointment_type: 'regular', doctor: doctor);
                    });
              },
              separatorBuilder: (context, index) => SizedBox(height: 14),
              itemCount: patientDoctorAppointmentListHospital?[index].patientDoctorAppointmentList?.length ?? 0),
        );
      },
    );
  }
}

class RegionTitle extends StatelessWidget {
  final String title;
  final String hmcCount;
  final String hmgCount;

  const RegionTitle(
      {super.key,
      required this.title,
      required this.hmcCount,
      required this.hmgCount});

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Text(
            title,
            style: TextStyle(
                fontSize: 22, color: Colors.black, fontWeight: FontWeight.w700),
          ),
          SizedBox(
            height: 8,
          ),
          Row(
            children: [
              Text(
                "${TranslationBase.of(context).HospitalString(num.parse(hmgCount)).replaceAll("@", hmgCount)} ,",
                style: TextStyle(
                    fontSize: 14,
                    color: Color(0xFFD02127),
                    fontWeight: FontWeight.w600),
              ),
              SizedBox(
                width: 8,
              ),
              Text(
                "${TranslationBase.of(context).MedicalCenterString(num.parse(hmcCount)).replaceAll("@", hmcCount)}",
                style: TextStyle(
                    fontSize: 14,
                    color: Color(0xFF40ACC9),
                    fontWeight: FontWeight.w600),
              ),
            ],
          ),
        ],
      ),
    );
  }
}

class HospitalTitle extends StatelessWidget {
  final String title;
  final String iconUrl;
  final bool isHMC;
  final String itemCount;

  const HospitalTitle(
      {super.key,
      required this.title,
      required this.iconUrl,
      required this.isHMC,
      required this.itemCount});

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Row(
            children: [
              SvgPicture.asset(iconUrl),
              SizedBox(
                width: 8,
              ),
              Text(
                title,
                style: TextStyle(
                    fontSize: 18,
                    color: isHMC ? Color(0xFF40ACC9) : Color(0xFFD02127),
                    fontWeight: FontWeight.w600),
              ),
            ],
          ),
          SizedBox(
            height: 6,
          ),
          Text(
            isHMC
                ? "${TranslationBase.of(context).MedicalCenterString(num.parse(itemCount)).replaceAll("@", itemCount)}"
                : "${TranslationBase.of(context).HospitalString(num.parse(itemCount)).replaceAll("@", itemCount)}",
            style: TextStyle(
                fontSize: 12, color: Colors.black, fontWeight: FontWeight.w600),
          ),
        ],
      ),
    );
  }
}
