package models

import (
	"fmt"
	"strings"
)

const HtmlType = "text/html; charset=UTF-8"
const PlainType = "text/html; charset=UTF-8"

type Mail struct {
	From    MailAddress
	To      MailAddresses
	Subject string
	Body    string
	Type    string
}

func (m *Mail) WithText(text string) *Mail {
	m.Body = text
	m.Type = PlainType
	return m
}

func (m *Mail) WithHTML(html string) *Mail {
	m.Body = html
	m.Type = HtmlType
	return m
}

func (m *Mail) String() string {
	return fmt.Sprintf("To: %s\r\n"+
		"From: %s\r\n"+
		"Subject: %s\r\n"+
		"Content-Type: %s\r\n"+
		"\r\n"+
		"%s\r\n",
		strings.Join(m.To.RawStrings(), ", "),
		m.From.String(),
		m.Subject,
		m.Type,
		m.Body,
	)
}

func (m *Mail) Reader() *strings.Reader {
	return strings.NewReader(m.String())
}