package email

import (
	"context"
	"fmt"

	"github.com/nexuscrm/kernel/pkg/ports"
	"github.com/nexuscrm/kernel/pkg/logging"
)

// NoopSender logs email details without delivering them.
// Used when SMTP is not configured (dev / local / unconfigured environments).
type NoopSender struct {
	logger *logging.Logger
}

// NewNoopSender creates a no-op email sender that logs instead of sending.
func NewNoopSender(logger *logging.Logger) *NoopSender {
	return &NoopSender{logger: logger}
}

// Send logs the email parameters and returns an accepted result without
// delivering to an external provider.
func (n *NoopSender) Send(_ context.Context, msg *ports.EmailMessage) (*ports.EmailSendResult, error) {
	toCount, ccCount, bccCount := 0, 0, 0
	if msg != nil {
		toCount = len(msg.To)
		ccCount = len(msg.Cc)
		bccCount = len(msg.Bcc)
	}
	n.logger.Info(fmt.Sprintf(
		"[NOOP EMAIL] ToCount=%d CcCount=%d BccCount=%d RecipientCount=%d Status=accepted (SMTP not configured; email not delivered)",
		toCount, ccCount, bccCount, toCount+ccCount+bccCount,
	))
	return ports.AcceptedEmailSendResult(msg, ""), nil
}
