package entity

// Виды текста записи. Расшифровка и вычитанный текст читаются по открытию одной
// записи и лежат строками `texts`, а не колонками: колонкой на каждый вид схема
// росла бы с каждым новым видом, а необратимый шаг схемы платится за каждую
// такую колонку отдельно.
const (
	// TextKindTranscript — сырая расшифровка, как её отдал распознаватель.
	TextKindTranscript = "transcript"
	// TextKindLiterary — вычитанный текст. Его считает отдельная задача; здесь
	// заведено только место, куда он ляжет.
	TextKindLiterary = "literary"
)

// Виды текста, которыми приложение спрашивает текст записи.
//
// Перечень закрыт, и каждое значение называет ровно одну хранимую вещь. Назван
// он так, а не парой «вид текста плюс форма показа», потому что реплики со
// временем — не вид текста: они лежат структурой разбора и принадлежат записи, а
// не тексту. Пара из двух параметров обещала бы сочетания, которых не существует.
//
// Вычитанный текст назван здесь вперёд, хотя считает его отдельная задача:
// перечень без него пришлось бы расширять правкой публичного контракта — того
// самого, который согласован один раз.
const (
	// TextViewTranscript — сырая расшифровка сплошным текстом.
	TextViewTranscript = TextKindTranscript
	// TextViewLiterary — вычитанный текст сплошным.
	TextViewLiterary = TextKindLiterary
	// TextViewReplicas — реплики со временем.
	TextViewReplicas = "replicas"
)

// IsKnownTextView — принадлежит ли вид закрытому перечню. Незаданный вид
// известным не считается: умолчание сделало бы ответ функцией того, что успел
// записать конвейер, а не состояния записи.
func IsKnownTextView(view string) bool {
	switch view {
	case TextViewTranscript, TextViewLiterary, TextViewReplicas:
		return true
	}
	return false
}

// Text — один вид текста одной записи. Пара «запись и вид» уникальна: повтор
// прерванного шага иначе завёл бы второй комплект строк, и вопрос «какой текст
// отдавать человеку» стал бы вопросом порядка записи, а не состояния.
type Text struct {
	Id       string
	RecordID string
	Kind     string
	Contents string
}
