package formatter_utils

import (
	"bufio"
	"strings"
)

type formatter struct{}

// NewFormatter создаёт реализацию IFormatter.
func NewFormatter() IFormatter {
	return &formatter{}
}

// FormatText форматирует многострочный текст: обрезает пробелы по краям
// строк, превращает "--" в тире и добавляет отступ абзаца.
func (f *formatter) FormatText(text string) string {
	scanner := bufio.NewScanner(strings.NewReader(text))

	scanner.Split(bufio.ScanLines)

	lines := []string{}
	for scanner.Scan() {
		lines = append(lines, scanner.Text())
	}

	var res strings.Builder
	for i, line := range lines {
		l := strings.TrimSpace(line)
		if strings.HasPrefix(l, "--") {
			l = strings.Replace(l, "--", "—", 1)
		}
		if i == 0 && strings.HasPrefix(l, "—") {
			res.WriteString("    ")
		}
		if i > 0 {
			res.WriteString("\n")
			if len(l) > 0 {
				res.WriteString("    ")
			}
		}
		res.WriteString(l)
	}
	return res.String()
}

// FormatString форматирует одиночную строку: обрезает пробелы и заменяет
// "--" на тире.
func (f *formatter) FormatString(text string) string {
	l := strings.TrimSpace(text)
	if strings.HasPrefix(l, "--") {
		l = strings.Replace(l, "--", "—", 1)
	}
	return l
}
