using CommunityToolkit.Mvvm.Messaging;
using CommunityToolkit.Mvvm.Messaging.Messages;
namespace LSFE.MobApp.Helpers;
///
/// Centralized helper for doctor status styling and updates
///
public static class DoctorStatusHelper
{
#region Status Text
public static string GetStatusText(byte status)
{
return status switch
{
0 => "Pending",
1 => "Started",
2 => "Completed",
3 => "Reschedule",
4 => "Missed",
_ => "Unknown"
};
}
#endregion
#region Status Colors
public static Color GetStatusBackgroundColor(byte status)
{
return status switch
{
0 => Color.FromArgb("#FEF3C7"), // Pending - soft amber
1 => Color.FromArgb("#D1FAE5"), // Started - mint green
2 => Color.FromArgb("#DBEAFE"), // Completed - soft blue
3 => Color.FromArgb("#FDE68A"), // Rescheduled - soft yellow
4 => Color.FromArgb("#FECACA"), // Missed - gentle red
_ => Color.FromArgb("#E5E7EB") // Default - gray
};
}
public static Color GetStatusTextColor(byte status)
{
return status switch
{
0 => Color.FromArgb("#92400E"), // Pending - amber dark
1 => Color.FromArgb("#065F46"), // Started - deep green
2 => Color.FromArgb("#1E40AF"), // Completed - deep blue
3 => Color.FromArgb("#92400E"), // Rescheduled - amber dark
4 => Color.FromArgb("#B91C1C"), // Missed - deep red
_ => Color.FromArgb("#374151") // Default - charcoal
};
}
#endregion
#region Status Update Broadcasting
///
/// Broadcast status update to all listening ViewModels
///
public static void BroadcastStatusUpdate(int doctorId)
{
WeakReferenceMessenger.Default.Send(new DoctorStatusUpdatedMessage(doctorId));
}
///
/// Register a ViewModel to listen for status updates
///
public static void RegisterForStatusUpdates(object recipient, Action onStatusUpdate)
{
WeakReferenceMessenger.Default.Register(recipient, (r, message) =>
{
onStatusUpdate(message.Value);
});
}
///
/// Unregister a ViewModel from status updates
///
public static void UnregisterFromStatusUpdates(object recipient)
{
WeakReferenceMessenger.Default.Unregister(recipient);
}
#endregion
}
///
/// Message for broadcasting doctor status updates
///
public class DoctorStatusUpdatedMessage : ValueChangedMessage
{
public DoctorStatusUpdatedMessage(int doctorId) : base(doctorId) { }
}