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, email, message, userID string) (*NotificationResponse, error) // SendSMS sends an SMS notification SendSMS(ctx context.Context, phoneNumber, message, userID string) (*NotificationResponse, error) // SendPush sends a push notification SendPush(ctx context.Context, deviceToken, message, userID string) (*NotificationResponse, error) // SendOTP sends an OTP notification SendOTP(ctx context.Context, phoneNumber, message, userID string) (*NotificationResponse, error) // Health checks if the notification service is available Health(ctx context.Context) error } // 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 // Build creates the notification request Build() (*NotificationRequest, error) // Send builds and sends the notification Send(ctx context.Context) (*NotificationResponse, error) }