package frontmatter

import (
	"bytes"
	"errors"
	"strings"
)

// HasRune checks if the file has the frontmatter rune
func HasRune(file []byte) bool {
	return strings.HasPrefix(string(file), "---") ||
		strings.HasPrefix(string(file), "+++") ||
		strings.HasPrefix(string(file), "{")
}

// AppendRune appends the frontmatter rune to a file
func AppendRune(frontmatter []byte, mark rune) []byte {
	frontmatter = bytes.TrimSpace(frontmatter)

	switch mark {
	case '-':
		return []byte("---\n" + string(frontmatter) + "\n---")
	case '+':
		return []byte("+++\n" + string(frontmatter) + "\n+++")
	case '{':
		return []byte("{\n" + string(frontmatter) + "\n}")
	}

	return frontmatter
}

// RuneToStringFormat converts the rune to a string with the format
func RuneToStringFormat(mark rune) (string, error) {
	switch mark {
	case '-':
		return "yaml", nil
	case '+':
		return "toml", nil
	case '{':
		return "json", nil
	default:
		return "", errors.New("Unsupported format type.")
	}
}

// StringFormatToRune converts the format name to its rune
func StringFormatToRune(format string) (rune, error) {
	switch format {
	case "yaml":
		return '-', nil
	case "toml":
		return '+', nil
	case "json":
		return '{', nil
	default:
		return '0', errors.New("Unsupported format type.")
	}
}