package mailgun

import "fmt"
import "strings"

type Recipient struct {
	Name  string `json:"-"`
	Email string `json:"-"`
}

func (r Recipient) String() string {
	if r.Name != "" {
		return fmt.Sprintf("%s <%s>", r.Name, r.Email)
	}
	return r.Email
}

// MarshalText satisfies TextMarshaler
func (r Recipient) MarshalText() ([]byte, error) {
	return []byte(r.String()), nil
}

// UnmarshalText satisfies TextUnmarshaler
func (r *Recipient) UnmarshalText(text []byte) error {
	s := string(text)
	if s[len(s)-1:] != ">" {
		*r = Recipient{Email: s}
		return nil
	}

	i := strings.Index(s, "<")
	// at least 1 char followed by a space
	if i < 2 {
		return fmt.Errorf("malformed recipient string '%s'", s)
	}
	*r = Recipient{
		Name:  strings.TrimSpace(s[:i]),
		Email: s[i+1 : len(s)-1],
	}

	return nil
}
