package notification import ( "context" ) // NotificationService defines the interface for notification operations type NotificationService interface { // SendNotification sends a notification using the configured client SendNotification(ctx context.Context, req *NotificationRequest) (*NotificationResponse, error) // SendEmail sends an email notification SendEmail(ctx context.Context, model Model) (*NotificationResponse, error) // SendSMS sends an SMS notification SendSMS(ctx context.Context, model Model) (*NotificationResponse, error) // SendPush sends a push notification SendPush(ctx context.Context, model Model) (*NotificationResponse, error) // SendOTP sends an OTP notification SendOTP(ctx context.Context, model Model) (*NotificationResponse, error) // GetNotifications retrieves a list of notifications GetNotifications(ctx context.Context, req *GetNotificationsRequest) (*NotificationListResponse, error) // GetNotification retrieves a single notification by ID GetNotification(ctx context.Context, notificationID string) (*DetailedNotificationResponse, error) // MarkSeen marks a notification as seen MarkSeen(ctx context.Context, notificationID string) (*MarkSeenResponse, error) // AllMarkSeen marks all notifications as seen for a user AllMarkSeen(ctx context.Context, userID string) (*MarkSeenResponse, error) // Health checks if the notification service is available Health(ctx context.Context) error // NewBuilder creates a new notification builder NewBuilder() Builder } // Builder provides a fluent interface for building notification requests type Builder interface { // SetEventType sets the event type SetEventType(eventType EventType) Builder // SetMessage sets the notification message SetMessage(message string) Builder // SetUserID sets the user ID SetUserID(userID string) Builder // SetEmail sets the email address SetEmail(email string) Builder // SetSMS sets the SMS phone number SetSMS(phoneNumber string) Builder // SetPush sets the push device token SetPush(deviceToken string) Builder // SetOTP sets the OTP phone number SetOTP(phoneNumber string) Builder // SetTitle sets the notification title SetTitle(title string) Builder // SetType sets the notification type SetType(notificationType string) Builder // SetPriority sets the notification priority SetPriority(priority string) Builder // SetScheduledAt sets the scheduled delivery time (0 for immediate) SetScheduledAt(scheduledAt int64) Builder // Build creates the notification request Build() (*NotificationRequest, error) // Send builds and sends the notification Send(ctx context.Context) (*NotificationResponse, error) }