package email

import (
	"crypto/tls"
	"net/smtp"

	"github.com/jordan-wright/email"
)

type Config struct {
	SMTP SMTPConfig `envPrefix:"SMTP_"`
	From string     `env:"FROM"`
}

type SMTPConfig struct {
	Host     string `env:"HOST"`
	Port     string `env:"PORT"`
	User     string `env:"USER"`
	Password string `env:"PASSWORD"`
}

type Service struct {
	from string
	pool *email.Pool
	cfg  Config
}

func New(cfg Config) (s *Service, err error) {
	p, err := email.NewPool(
		cfg.SMTP.Host+":"+cfg.SMTP.Port,
		1,
		smtp.PlainAuth(
			"",
			cfg.SMTP.User,
			cfg.SMTP.Password,
			cfg.SMTP.Host,
		), &tls.Config{
			InsecureSkipVerify: true,          // set false in production
			ServerName:         cfg.SMTP.Host, // must match the SMTP host
		})
	if err != nil {
		return
	}

	s = &Service{
		from: cfg.From,
		pool: p,
		cfg:  cfg,
	}

	return
}
