package tools

import (
	"regexp"
	"strings"

	"github.com/axllent/mailpit/internal/tools/html2text"
)

// CreateSnippet returns a message snippet. It will use the HTML version (if it exists)
// otherwise the text version.
func CreateSnippet(text, html string) string {
	text = strings.TrimSpace(text)
	html = strings.TrimSpace(html)
	limit := 200
	spaceRe := regexp.MustCompile(`\s+`)

	if text == "" && html == "" {
		return ""
	}

	if html != "" {
		data := html2text.Strip(html, false)

		if len(data) <= limit {
			return data
		}

		return data[0:limit] + "..."
	}

	if text != "" {
		// replace \uFEFF with space, see https://github.com/golang/go/issues/42274#issuecomment-1017258184
		text = strings.ReplaceAll(text, string('\uFEFF'), " ")
		text = strings.TrimSpace(spaceRe.ReplaceAllString(text, " "))
		if len(text) <= limit {
			return text
		}

		return text[0:limit] + "..."
	}

	return ""
}