package infra

// EmailAttachment represents a file attached to an email.
type EmailAttachment struct {
	Filename    string // nombre del archivo (ej: "report.pdf")
	ContentType string // MIME type (ej: "application/pdf", "image/png")
	Data        []byte // contenido binario del adjunto
}

// EmailMessage is an immutable email ready to send.
// Build with EmailBuildHTML, EmailBuildText, or EmailWithAttachment.
type EmailMessage struct {
	From        string            // direccion del remitente (ej: "Alice <alice@example.com>")
	To          []string          // destinatarios principales
	CC          []string          // copia (puede ser nil)
	BCC         []string          // copia oculta (puede ser nil)
	Subject     string            // asunto del mensaje
	BodyHTML    string            // cuerpo HTML (puede ser vacio si BodyText esta presente)
	BodyText    string            // cuerpo texto plano (puede ser vacio si BodyHTML esta presente)
	Attachments []EmailAttachment // adjuntos (puede ser nil)
	Headers     map[string]string // headers MIME adicionales (ej: "X-Mailer": "fn_registry")
}

// SMTPConfig holds connection parameters for an SMTP server.
// TLSMode controls the encryption strategy:
//
//	"tls"      — TLS directo (port 465)
//	"starttls" — STARTTLS upgrade (port 587)
//	""         — sin cifrado (port 25)
type SMTPConfig struct {
	Host     string // hostname del servidor SMTP (ej: "smtp.gmail.com")
	Port     int    // puerto (465, 587, 25)
	Username string // usuario/email de autenticacion
	Password string // contrasena o app password
	TLSMode  string // "tls", "starttls" o "" (sin cifrado)
}
