package entity

import (
	"time"
)

// Где лежит копия файла. Поле названо `location`, а не `storage`: последним
// словом зовут само хранилище, и третий смысл у одного слова развёл бы по
// разным вещам запись о файле и хранилище, в котором она лежит.
const (
	LocationLocal = "local"
	LocationS3    = "s3"
)

// MaxRecordSize — потолок размера одного файла записи. Выведен из расчётного
// потолка записи в шесть часов с запасом на видео, а не из замера.
//
// Число нужно назвать **явно** в двух местах сразу: у поля файла в хранилище
// нулевой потолок значит не «без предела», а умолчание библиотеки в 5 МиБ, а у
// тела запроса приёма умолчание роутера отсекало бы запись раньше, чем она
// дойдёт до обработчика — без строки в журнале приёма.
const MaxRecordSize int64 = 8 << 30 // 8 ГиБ

// File — одна физическая копия записи. Их ровно две: принятая и приведённая к
// рабочему формату. Копия во внешнем хранилище файлом записи не считается — она
// существует только потому, что провайдер читает аудио по адресу, и её ключ
// живёт в строке попытки распознавания.
type File struct {
	Id       string
	Location string
	// FileName — имя, под которым файл лежит: имя задаёт сервис. Своего суффикса
	// хранилище к заданному имени не дописывает: суффикс появляется только у
	// имён, которые оно строит само из имени отправителя, а это умолчание не
	// применяется.
	FileName string
	Size     int64
	// Format — расширение без точки, приведённое к нижнему регистру. Наружу оно
	// выходит только через метку метрики, приведённую к перечню известных.
	Format string
	// DurationMs — длительность записи, если её удалось прочитать.
	DurationMs int64
	CreatedAt  time.Time
}
