package factory

import (
	"errors"
	"fmt"
)

const (
	SMS   = 1
	Email = 2
)

type Notification struct {
	To      string
	Message string
}

type Notifier interface {
	SendNotification(Notification) string
}

type SMSNotification struct{}
func (n SMSNotification) SendNotification(notification Notification) string {
	return fmt.Sprintf("`%s` was sent to number `%s` successfully!", notification.Message, notification.To)
}

type EmailNotification struct{}
func (n EmailNotification) SendNotification(notification Notification) string {
	return fmt.Sprintf("`%s` was sent to email `%s` successfully!", notification.Message, notification.To)
}

// Factory .....
func GetNotifier(notifierType int) (Notifier, error) {
	switch notifierType {
		case SMS:
			return new(SMSNotification), nil
		case Email:
			return new(EmailNotification), nil
		default:
		return nil, errors.New(fmt.Sprintf("Notifier type %d not recognized.", notifierType))
	}
}