package storytelling

type IStory interface {
	GetStory(scenario *Story, codes []string) *Story
}

// История - это введение и набор точек
type Story struct {

	// Введение - то, что игрок получает в начале игры
	Introduction *Introduction `json:"introduction,omitempty"`

	// Список точек
	Places []*Place `json:"places"`
}

// Введение - текст и аудио, которые игрок получает в начале игры
type Introduction struct {

	// Текст введения
	Text string `json:"text"`

	// Аудио введения
	Audio string `json:"audio,omitempty"`
}

// Точка - что-то куда можно сходить
// Это может быть место - аптека, остановка, площадь...
// Это может быть персонаж - пострадавший, продавец, полицейский...
// Это может быть описание действия игрока - ответ на вопрос, реакция на выбитую дверь...
type Place struct {

	// Код - то что вбивает игрок
	Code string `json:"code"`

	// Название места, имя персонажа, заданный игроком вопрос...
	Name string `json:"name"`

	// Текст - получаемая текстовая информация
	Text string `json:"text"`

	// Картинка - получаемая визуальная информация
	Image string `json:"image"`

	// Признак скрытой карточки - некоторые места изначально не доступны
	Hidden bool `json:"hidden"`

	// Приложения - получаемые улики
	Applications []*Application `json:"applications,omitempty"`

	// Двери к другим точкам - действия или диалоги, открывающие другие точки
	Doors []*Door `json:"doors"`

	// Получаемые ключи - ключи используются для получения доступа к скрытым дверям
	Keys []*Key `json:"keys"`
}

// Приложение - улика
// Это может быть оружие, отпечатки, фотография...
type Application struct {

	// Название улики
	Name string `json:"name"`

	// Картинка
	Image string `json:"image"`

	// Тип файла улики: image | pdf | audio.
	FileType string `json:"file_type,omitempty"`
}

// Дверь - действие или диалог
type Door struct {

	// Код
	Code string `json:"code"`

	// Название - заданный вопрос, проделанное действие...
	Name string `json:"name"`

	// Некоторые двери изначально не доступны
	// Ключи требуемые для получения доступа к скрытым дверям
	// Если указаны ключи то дверь считается скрытой
	Keys []*Key `json:"keys"`
}

// Аналог карт допуска в "Тайны Аркхема"
type Key struct {

	// Название
	Name string `json:"name"`
}
