|  |  |  | import 'package:flutter/material.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/core/app_assets.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/core/app_state.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/core/dependencies.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/core/utils/date_util.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/core/utils/utils.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_appointment_history_response_model.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/features/my_appointments/utils/appointment_type.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/presentation/appointments/appointment_details_page.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/theme/colors.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart'; | 
					
						
							|  |  |  | import 'package:smooth_corner/smooth_corner.dart'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class AppointmentCard extends StatefulWidget { | 
					
						
							|  |  |  |   AppointmentCard({super.key, required this.patientAppointmentHistoryResponseModel, required this.myAppointmentsViewModel}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   PatientAppointmentHistoryResponseModel patientAppointmentHistoryResponseModel; | 
					
						
							|  |  |  |   MyAppointmentsViewModel myAppointmentsViewModel; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   @override | 
					
						
							|  |  |  |   State<AppointmentCard> createState() => _AppointmentCardState(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class _AppointmentCardState extends State<AppointmentCard> { | 
					
						
							|  |  |  |   @override | 
					
						
							|  |  |  |   Widget build(BuildContext context) { | 
					
						
							|  |  |  |     AppState appState = getIt.get<AppState>(); | 
					
						
							|  |  |  |     return InkWell( | 
					
						
							|  |  |  |       onTap: () { | 
					
						
							|  |  |  |         Navigator.of(context).push( | 
					
						
							|  |  |  |           FadePage( | 
					
						
							|  |  |  |             page: AppointmentDetailsPage(patientAppointmentHistoryResponseModel: widget.patientAppointmentHistoryResponseModel), | 
					
						
							|  |  |  |           ), | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       child: Padding( | 
					
						
							|  |  |  |         padding: EdgeInsets.all(14.h), | 
					
						
							|  |  |  |         child: Column( | 
					
						
							|  |  |  |           crossAxisAlignment: CrossAxisAlignment.start, | 
					
						
							|  |  |  |           children: [ | 
					
						
							|  |  |  |             Row( | 
					
						
							|  |  |  |               mainAxisAlignment: MainAxisAlignment.spaceBetween, | 
					
						
							|  |  |  |               children: [ | 
					
						
							|  |  |  |                 Expanded( | 
					
						
							|  |  |  |                   child: Wrap( | 
					
						
							|  |  |  |                     alignment: WrapAlignment.start, | 
					
						
							|  |  |  |                     direction: Axis.horizontal, | 
					
						
							|  |  |  |                     spacing: 6.h, | 
					
						
							|  |  |  |                     runSpacing: 6.h, | 
					
						
							|  |  |  |                     children: [ | 
					
						
							|  |  |  |                       Row( | 
					
						
							|  |  |  |                         mainAxisSize: MainAxisSize.min, | 
					
						
							|  |  |  |                         children: [ | 
					
						
							|  |  |  |                           CustomButton( | 
					
						
							|  |  |  |                             text: appState.isArabic() | 
					
						
							|  |  |  |                                 ? widget.patientAppointmentHistoryResponseModel.isInOutPatientDescriptionN! | 
					
						
							|  |  |  |                                 : widget.patientAppointmentHistoryResponseModel.isInOutPatientDescription!, | 
					
						
							|  |  |  |                             onPressed: () {}, | 
					
						
							|  |  |  |                             backgroundColor: AppColors.primaryRedColor.withOpacity(0.1), | 
					
						
							|  |  |  |                             borderColor: AppColors.primaryRedColor.withOpacity(0.0), | 
					
						
							|  |  |  |                             textColor: AppColors.primaryRedColor, | 
					
						
							|  |  |  |                             fontSize: 10, | 
					
						
							|  |  |  |                             fontWeight: FontWeight.w500, | 
					
						
							|  |  |  |                             borderRadius: 8, | 
					
						
							|  |  |  |                             padding: EdgeInsets.fromLTRB(10, 0, 10, 0), | 
					
						
							|  |  |  |                             height: 30.h, | 
					
						
							|  |  |  |                           ), | 
					
						
							|  |  |  |                         ], | 
					
						
							|  |  |  |                       ), | 
					
						
							|  |  |  |                       Row( | 
					
						
							|  |  |  |                         mainAxisSize: MainAxisSize.min, | 
					
						
							|  |  |  |                         children: [ | 
					
						
							|  |  |  |                           CustomButton( | 
					
						
							|  |  |  |                             text: AppointmentType.getAppointmentStatusType(widget.patientAppointmentHistoryResponseModel.patientStatusType!), | 
					
						
							|  |  |  |                             onPressed: () {}, | 
					
						
							|  |  |  |                             backgroundColor: AppColors.successColor.withOpacity(0.1), | 
					
						
							|  |  |  |                             borderColor: AppColors.successColor.withOpacity(0.0), | 
					
						
							|  |  |  |                             textColor: AppColors.successColor, | 
					
						
							|  |  |  |                             fontSize: 10, | 
					
						
							|  |  |  |                             fontWeight: FontWeight.w500, | 
					
						
							|  |  |  |                             borderRadius: 8, | 
					
						
							|  |  |  |                             padding: EdgeInsets.fromLTRB(10, 0, 10, 0), | 
					
						
							|  |  |  |                             height: 30.h, | 
					
						
							|  |  |  |                           ), | 
					
						
							|  |  |  |                         ], | 
					
						
							|  |  |  |                       ), | 
					
						
							|  |  |  |                     ], | 
					
						
							|  |  |  |                   ), | 
					
						
							|  |  |  |                 ), | 
					
						
							|  |  |  |                 // TODO: Implement the logic to enable/disable the switch based on reminder status
 | 
					
						
							|  |  |  |                 Switch( | 
					
						
							|  |  |  |                   activeColor: AppColors.successColor, | 
					
						
							|  |  |  |                   activeTrackColor: AppColors.successColor.withValues(alpha: .15), | 
					
						
							|  |  |  |                   thumbIcon: WidgetStateProperty.resolveWith<Icon?>( | 
					
						
							|  |  |  |                     (Set<WidgetState> states) { | 
					
						
							|  |  |  |                       if (states.contains(WidgetState.selected)) { | 
					
						
							|  |  |  |                         return const Icon(Icons.check); // Icon when switch is ON
 | 
					
						
							|  |  |  |                       } | 
					
						
							|  |  |  |                       return const Icon(Icons.close); // Icon when switch is OFF
 | 
					
						
							|  |  |  |                     }, | 
					
						
							|  |  |  |                   ), | 
					
						
							|  |  |  |                   value: widget.patientAppointmentHistoryResponseModel.hasReminder!, | 
					
						
							|  |  |  |                   onChanged: (newValue) { | 
					
						
							|  |  |  |                     setState(() { | 
					
						
							|  |  |  |                       widget.myAppointmentsViewModel.setAppointmentReminder(newValue, widget.patientAppointmentHistoryResponseModel); | 
					
						
							|  |  |  |                     }); | 
					
						
							|  |  |  |                   }, | 
					
						
							|  |  |  |                 ), | 
					
						
							|  |  |  |               ], | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             SizedBox(height: 16.h), | 
					
						
							|  |  |  |             Row( | 
					
						
							|  |  |  |               crossAxisAlignment: CrossAxisAlignment.start, | 
					
						
							|  |  |  |               children: [ | 
					
						
							|  |  |  |                 Image.network( | 
					
						
							|  |  |  |                   widget.patientAppointmentHistoryResponseModel.doctorImageURL!, | 
					
						
							|  |  |  |                   width: 63.h, | 
					
						
							|  |  |  |                   height: 63.h, | 
					
						
							|  |  |  |                   fit: BoxFit.fill, | 
					
						
							|  |  |  |                 ).circle(100), | 
					
						
							|  |  |  |                 SizedBox(width: 16.h), | 
					
						
							|  |  |  |                 Expanded( | 
					
						
							|  |  |  |                   child: Column( | 
					
						
							|  |  |  |                     crossAxisAlignment: CrossAxisAlignment.start, | 
					
						
							|  |  |  |                     children: [ | 
					
						
							|  |  |  |                       widget.patientAppointmentHistoryResponseModel.doctorNameObj!.toText16(isBold: true), | 
					
						
							|  |  |  |                       Wrap( | 
					
						
							|  |  |  |                         direction: Axis.horizontal, | 
					
						
							|  |  |  |                         spacing: 3.h, | 
					
						
							|  |  |  |                         runSpacing: -8.h, | 
					
						
							|  |  |  |                         children: [ | 
					
						
							|  |  |  |                           AppCustomChipWidget(labelText: widget.patientAppointmentHistoryResponseModel.clinicName!), | 
					
						
							|  |  |  |                           AppCustomChipWidget(labelText: widget.patientAppointmentHistoryResponseModel.projectName!), | 
					
						
							|  |  |  |                           AppCustomChipWidget( | 
					
						
							|  |  |  |                               icon: AppAssets.appointment_calendar_icon, | 
					
						
							|  |  |  |                               labelText: DateUtil.formatDateToDate(DateUtil.convertStringToDate(widget.patientAppointmentHistoryResponseModel.appointmentDate), false)), | 
					
						
							|  |  |  |                           AppCustomChipWidget( | 
					
						
							|  |  |  |                               icon: AppAssets.appointment_time_icon, | 
					
						
							|  |  |  |                               labelText: DateUtil.formatDateToTimeLang(DateUtil.convertStringToDate(widget.patientAppointmentHistoryResponseModel.appointmentDate), false)), | 
					
						
							|  |  |  |                         ], | 
					
						
							|  |  |  |                       ), | 
					
						
							|  |  |  |                     ], | 
					
						
							|  |  |  |                   ), | 
					
						
							|  |  |  |                 ), | 
					
						
							|  |  |  |               ], | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             SizedBox(height: 16.h), | 
					
						
							|  |  |  |             Row( | 
					
						
							|  |  |  |               children: [ | 
					
						
							|  |  |  |                 Expanded( | 
					
						
							|  |  |  |                   flex: 6, | 
					
						
							|  |  |  |                   child: CustomButton( | 
					
						
							|  |  |  |                     text: AppointmentType.getNextActionText(widget.patientAppointmentHistoryResponseModel.nextAction), | 
					
						
							|  |  |  |                     onPressed: () { | 
					
						
							|  |  |  |                       Navigator.of(context) | 
					
						
							|  |  |  |                           .push(FadePage( | 
					
						
							|  |  |  |                         page: AppointmentDetailsPage(patientAppointmentHistoryResponseModel: widget.patientAppointmentHistoryResponseModel), | 
					
						
							|  |  |  |                       )) | 
					
						
							|  |  |  |                           .then((val) { | 
					
						
							|  |  |  |                         widget.myAppointmentsViewModel.initAppointmentsViewModel(); | 
					
						
							|  |  |  |                         widget.myAppointmentsViewModel.getPatientAppointments(true, false); | 
					
						
							|  |  |  |                       }); | 
					
						
							|  |  |  |                     }, | 
					
						
							|  |  |  |                     backgroundColor: AppointmentType.getNextActionButtonColor(widget.patientAppointmentHistoryResponseModel.nextAction).withOpacity(0.1), | 
					
						
							|  |  |  |                     borderColor: AppointmentType.getNextActionButtonColor(widget.patientAppointmentHistoryResponseModel.nextAction).withOpacity(0.01), | 
					
						
							|  |  |  |                     textColor: AppointmentType.getNextActionButtonColor(widget.patientAppointmentHistoryResponseModel.nextAction), | 
					
						
							|  |  |  |                     fontSize: 14, | 
					
						
							|  |  |  |                     fontWeight: FontWeight.w500, | 
					
						
							|  |  |  |                     borderRadius: 12, | 
					
						
							|  |  |  |                     padding: EdgeInsets.fromLTRB(10, 0, 10, 0), | 
					
						
							|  |  |  |                     height: 40.h, | 
					
						
							|  |  |  |                     icon: AppointmentType.getNextActionIcon(widget.patientAppointmentHistoryResponseModel.nextAction), | 
					
						
							|  |  |  |                     iconColor: AppointmentType.getNextActionButtonColor(widget.patientAppointmentHistoryResponseModel.nextAction), | 
					
						
							|  |  |  |                     iconSize: 14.h, | 
					
						
							|  |  |  |                   ), | 
					
						
							|  |  |  |                 ), | 
					
						
							|  |  |  |                 SizedBox(width: 8.h), | 
					
						
							|  |  |  |                 Expanded( | 
					
						
							|  |  |  |                   flex: 1, | 
					
						
							|  |  |  |                   child: Container( | 
					
						
							|  |  |  |                     height: 40.h, | 
					
						
							|  |  |  |                     width: 40.h, | 
					
						
							|  |  |  |                     decoration: RoundedRectangleBorder().toSmoothCornerDecoration( | 
					
						
							|  |  |  |                       color: AppColors.textColor, | 
					
						
							|  |  |  |                       borderRadius: 10.h, | 
					
						
							|  |  |  |                     ), | 
					
						
							|  |  |  |                     child: Padding( | 
					
						
							|  |  |  |                       padding: EdgeInsets.all(10.h), | 
					
						
							|  |  |  |                       child: Utils.buildSvgWithAssets( | 
					
						
							|  |  |  |                         icon: AppAssets.forward_arrow_icon, | 
					
						
							|  |  |  |                         width: 10.h, | 
					
						
							|  |  |  |                         height: 10.h, | 
					
						
							|  |  |  |                         fit: BoxFit.contain, | 
					
						
							|  |  |  |                       ), | 
					
						
							|  |  |  |                     ), | 
					
						
							|  |  |  |                   ).onPress(() { | 
					
						
							|  |  |  |                     Navigator.of(context).push( | 
					
						
							|  |  |  |                       FadePage( | 
					
						
							|  |  |  |                         page: AppointmentDetailsPage(patientAppointmentHistoryResponseModel: widget.patientAppointmentHistoryResponseModel), | 
					
						
							|  |  |  |                       ), | 
					
						
							|  |  |  |                     ); | 
					
						
							|  |  |  |                   }), | 
					
						
							|  |  |  |                 ), | 
					
						
							|  |  |  |               ], | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |           ], | 
					
						
							|  |  |  |         ), | 
					
						
							|  |  |  |       ), | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   void performAppointmentNextAction(nextAction) {} | 
					
						
							|  |  |  | } |