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)
}
