/** UI strings loaded from en.yml / ru.yml (must match `ui` keys in those files). */
export interface Translations {
  loading: string;
  close: string;
  cancel: string;
  confirm: string;
  empty: string;
  none: string;
  error: string;
  back: string;
  hp: string;
  atk: string;
  def: string;
  spd: string;
  moveSpd: string;
  str: string;
  con: string;
  agi: string;
  luck: string;
  xp: string;
  gold: string;
  level: string;
  stat: string;
  heroStats: string;
  experience: string;
  activeBuffs: string;
  activeDebuffs: string;
  equipment: string;
  slotWeapon: string;
  slotOffHand: string;
  slotHead: string;
  slotChest: string;
  slotLegs: string;
  slotFeet: string;
  slotCloak: string;
  slotNeck: string;
  slotRing: string;
  slotWrist: string;
  slotHands: string;
  slotQuiver: string;
  inventory: string;
  common: string;
  uncommon: string;
  rare: string;
  epic: string;
  legendary: string;
  buffRush: string;
  buffRage: string;
  buffShield: string;
  buffLuck: string;
  buffResurrection: string;
  buffHeal: string;
  buffPowerPotion: string;
  buffWarCry: string;
  buffRushDesc: string;
  buffRageDesc: string;
  buffShieldDesc: string;
  buffLuckDesc: string;
  buffResurrectionDesc: string;
  buffHealDesc: string;
  buffPowerPotionDesc: string;
  buffWarCryDesc: string;
  charges: string;
  refillsAt: string;
  refill: string;
  refillQuestion: string;
  noChargesLeft: string;
  debuffPoison: string;
  debuffFreeze: string;
  debuffBurn: string;
  debuffStun: string;
  debuffSlow: string;
  debuffWeaken: string;
  debuffIceSlow: string;
  questLog: string;
  noActiveQuests: string;
  claimRewards: string;
  claimRewardsDisabledDead: string;
  questDestination: string;
  abandon: string;
  acceptQuest: string;
  questAccepted: string;
  inProgressQuests: string;
  availableQuestsSection: string;
  loadingQuests: string;
  noQuestsRightNow: string;
  yourGoldLabel: string;
  servicesSection: string;
  questRewardsClaimed: string;
  questAbandoned: string;
  failedToAcceptQuest: string;
  failedToClaimRewards: string;
  failedToAbandonQuest: string;
  completed: string;
  questGiver: string;
  bountyHunter: string;
  elder: string;
  merchant: string;
  armorer: string;
  weaponSmith: string;
  jeweler: string;
  healer: string;
  npc: string;
  buyPotion: string;
  buyPotionForGold: string;
  openMerchantShop: string;
  openHealerServices: string;
  buyRandomGear: string;
  merchantStockLoading: string;
  merchantStockFailed: string;
  buyGearForGold: string;
  merchantEmptyStock: string;
  boughtGearFromMerchant: string;
  failedToBuyGear: string;
  healToFull: string;
  healToFullForGold: string;
  viewQuests: string;
  npcInteractTalk: string;
  heroMeetTitle: string;
  heroMeetPlaceholder: string;
  heroMeetSend: string;
  heroMeetEndConversation: string;
  heroMeetCharCount: string;
  shopHealingPotionName: string;
  shopHealingPotionDesc: string;
  shopFullHealName: string;
  shopFullHealDesc: string;
  boughtPotion: string;
  healedToFull: string;
  notEnoughGold: string;
  failedToBuyPotion: string;
  failedToHeal: string;
  giveGoldForItem: string;
  accept: string;
  decline: string;
  giving: string;
  youDied: string;
  reviveNow: string;
  freeRevivesLeft: string;
  revivesUnlimitedSubscription: string;
  reviveNowWithCount: string;
  autoReviveIn: string;
  noFreeRevives: string;
  chooseHeroName: string;
  enterName: string;
  continue: string;
  saving: string;
  nameTaken: string;
  invalidName: string;
  serverError: string;
  connectionFailed: string;
  whileYouWereAway: string;
  killedMonsters: string;
  gainedXP: string;
  gainedGold: string;
  gainedLevels: string;
  offlineDeaths: string;
  offlineRevives: string;
  offlineLootFound: string;
  tapToDismiss: string;
  achievementUnlockedToast: string;
  toastGainedXp: string;
  toastGainedGold: string;
  toastFoundItem: string;
  levelUp: string;
  heroRevived: string;
  entering: string;
  newEquipment: string;
  potionsCollected: string;
  questProgress: string;
  questCompleted: string;
  buffLimitReached: string;
  reviveNotAllowed: string;
  dailyTaskClaimed: string;
  failedToClaimReward: string;
  map: string;
  noEventsYet: string;
  combatLogTitle: string;
  logEnteredTown: string;
  logDeclinedWanderingMerchant: string;
  logMerchantMovedOn: string;
  adventureLog: string;
  shopLabel: string;
  healerLabel: string;
  questLabel: string;
  heroSheetQuestBadgeAria: string;
  stats: string;
  character: string;
  journal: string;
  quests: string;
  hero: string;
  changelogTitle: string;
  changelogOk: string;
  changelogVersion: string;
  settings: string;
  language: string;
  english: string;
  russian: string;
}

export type TranslationKey = keyof Translations;

/** quest_key from DB → localized title/description (see quests.*.yml). */
export type QuestLocaleBundle = Record<string, { title: string; description: string }>;

export interface LocaleYamlDoc {
  ui: Translations;
  adventure_log: Record<string, string>;
  achievements: Record<string, string>;
  /** Slug → line text; phrase codes are roadside.<slug>. */
  roadside: Record<string, string>;
  /** npcType → slug → line text; matches backend town_visit.<type>.<slug>. */
  town_npc_visit: Record<string, Record<string, string>>;
  /** DB `enemies.type` slug → display name (en / ru). */
  enemy_types: Record<string, string>;
  quests: QuestLocaleBundle;
}
