package notifier

type SendPasswordResetEmailOpts struct {
	Email string
	URL   string
}

type SendGithubRelinkEmailOpts struct {
	Email string
	URL   string
}

type SendEmailVerificationOpts struct {
	Email string
	URL   string
}

type SendProjectInviteEmailOpts struct {
	InviteeEmail      string
	URL               string
	Project           string
	ProjectOwnerEmail string
}

type SendProjectDeleteEmailOpts struct {
	Project string
	Email   string
}

type UserNotifier interface {
	SendPasswordResetEmail(opts *SendPasswordResetEmailOpts) error
	SendGithubRelinkEmail(opts *SendGithubRelinkEmailOpts) error
	SendEmailVerification(opts *SendEmailVerificationOpts) error
	SendProjectInviteEmail(opts *SendProjectInviteEmailOpts) error
	SendProjectDeleteEmail(opts *SendProjectDeleteEmailOpts) error
}

type EmptyUserNotifier struct{}

func (e *EmptyUserNotifier) SendPasswordResetEmail(opts *SendPasswordResetEmailOpts) error {
	return nil
}

func (e *EmptyUserNotifier) SendGithubRelinkEmail(opts *SendGithubRelinkEmailOpts) error {
	return nil
}

func (e *EmptyUserNotifier) SendEmailVerification(opts *SendEmailVerificationOpts) error {
	return nil
}

func (e *EmptyUserNotifier) SendProjectInviteEmail(opts *SendProjectInviteEmailOpts) error {
	return nil
}

func (e *EmptyUserNotifier) SendProjectDeleteEmail(opts *SendProjectDeleteEmailOpts) error {
	return nil
}
