package email

import (
	"os"
	"strings"

	"github.com/nexuscrm/backend/internal/domain/ports"
	"github.com/nexuscrm/backend/pkg/logging"
)

// NewEmailSenderFromEnv creates the appropriate EmailSender based on
// environment variables. When SMTP_HOST is set, returns an SMTPSender;
// otherwise returns a NoopSender that only logs.
func NewEmailSenderFromEnv(logger *logging.Logger) ports.EmailSender {
	host := os.Getenv("SMTP_HOST")
	if host == "" {
		logger.Info("SMTP_HOST not set — email sending disabled (noop mode)")
		return NewNoopSender(logger)
	}

	port := os.Getenv("SMTP_PORT")
	if port == "" {
		port = "587"
	}

	user := os.Getenv("SMTP_USER")
	password := os.Getenv("SMTP_PASSWORD")
	from := os.Getenv("SMTP_FROM")
	if from == "" {
		from = "noreply@nexuscrm.com"
	}

	useTLS := true
	if v := os.Getenv("SMTP_TLS"); v != "" {
		useTLS = strings.EqualFold(v, "true") || v == "1"
	}

	logger.Info("SMTP email sender configured: host=" + host + " port=" + port + " from=" + from)
	return NewSMTPSender(host, port, user, password, from, useTLS)
}
