package main

import "fmt"

// Lang — язык интерфейса.
type Lang int

const (
	LangRU Lang = iota
	LangEN
)

// currentLang — текущий выбранный язык интерфейса. Пакетный
// уровень оправдан тем, что приложение однопоточное (TUI обновляется
// строго последовательно через Bubble Tea), а язык выбирается один
// раз в начале (см. экран выбора языка в menu.go) и меняется только
// через явное действие пользователя.
var currentLang = LangRU

// SetLanguage устанавливает текущий язык интерфейса.
func SetLanguage(l Lang) {
	currentLang = l
}

// CurrentLang возвращает текущий язык интерфейса.
func CurrentLang() Lang {
	return currentLang
}

// translationEntry — пара переводов одного ключа.
type translationEntry struct {
	ru string
	en string
}

// T возвращает перевод строки по ключу key на текущем языке. Если
// ключ не найден в таблице translations — возвращается сам ключ
// (это осознанный "мягкий" фолбэк: пропущенный перевод не ломает
// интерфейс, а просто виден как есть, что легко заметить и
// исправить).
func T(key string) string {
	if e, ok := translations[key]; ok {
		if CurrentLang() == LangEN {
			return e.en
		}
		return e.ru
	}
	return key
}

// Tf — то же самое, что T, но для строк-форматов (используются как
// первый аргумент fmt.Sprintf): сначала переводится сам формат,
// затем в него подставляются аргументы.
func Tf(key string, args ...interface{}) string {
	return fmt.Sprintf(T(key), args...)
}
