package sms

import (
	"context"
	"log/slog"
)

const (
	ProviderNoop   = "noop"
	ProviderTwilio = "twilio"
)

type Receipt struct {
	Provider          string
	ProviderMessageID string
	ProviderStatus    string
	SenderIdentity    string
}

type Sender interface {
	Send(ctx context.Context, mobile string, code string) (Receipt, error)
}

type noopSender struct{}

// NewNoop constructs a silent sender. Development and E2E callers that need
// verification codes must wrap it with a dedicated recorder instead of
// writing codes to the operational logger.
func NewNoop(_ *slog.Logger) Sender {
	return &noopSender{}
}

func (sender *noopSender) Send(_ context.Context, _ string, _ string) (Receipt, error) {
	return Receipt{Provider: ProviderNoop}, nil
}
