import type { Locale } from './localeCodes';

type Bilingual = { en: string; ru: string };

/** Pool for `npc.elder.byid.<id>.v1` — index `(id * 3) % length` (matches migration 000034). */
export const ELDER_GEN_NAMES: Bilingual[] = [
  { en: 'Edmund Weaver', ru: 'Эдмунд Уивер' },
  { en: 'Roger Thane', ru: 'Роджер Тейн' },
  { en: 'Aldous Pryor', ru: 'Олдос Прайор' },
  { en: 'Wilfred Cantor', ru: 'Уилфред Кантор' },
  { en: 'Benedict Marsh', ru: 'Бенедикт Марш' },
  { en: 'Godwin Alder', ru: 'Годвин Олдер' },
  { en: 'Piers Roper', ru: 'Пирс Ропер' },
  { en: 'Simon Hext', ru: 'Саймон Хекст' },
  { en: 'Thaddeus Wexford', ru: 'Таддеус Уэксфорд' },
  { en: 'Lawrence Fitzhugh', ru: 'Лоуренс Фитцхью' },
  { en: 'Martin Crier', ru: 'Мартин Крайер' },
  { en: 'Humphrey Stowe', ru: 'Хамфри Стоу' },
  { en: 'Geoffrey Merton', ru: 'Джеффри Мертон' },
  { en: 'Richard Plowman', ru: 'Ричард Плауман' },
  { en: 'Walter Burgh', ru: 'Уолтер Бург' },
  { en: 'Thomas Reeve', ru: 'Томас Рив' },
  { en: 'Henry Wainwright', ru: 'Генри Уайнрайт' },
  { en: 'Stephen Tiler', ru: 'Стивен Тайлер' },
  { en: 'Nicholas Cooper', ru: 'Николас Купер' },
  { en: 'James Fletcher', ru: 'Джеймс Флетчер' },
];

/** Pool for `npc.medic.byid.<id>.v1` — index `(id * 7) % length`. */
export const MEDIC_GEN_NAMES: Bilingual[] = [
  { en: 'Brother Anselm', ru: 'Брат Ансельм' },
  { en: 'Sister Gode', ru: 'Сестра Годе' },
  { en: 'Brother Piers', ru: 'Брат Пирс' },
  { en: 'Sister Edith', ru: 'Сестра Эдит' },
  { en: 'Brother Osmund', ru: 'Брат Осмунд' },
  { en: 'Sister Maud', ru: 'Сестра Мод' },
  { en: 'Brother Cuthbert', ru: 'Брат Кутберт' },
  { en: 'Sister Agnes', ru: 'Сестра Агнес' },
  { en: 'Brother Wulfstan', ru: 'Брат Вульфстан' },
  { en: 'Sister Hilde', ru: 'Сестра Хильде' },
  { en: 'Brother Leofric', ru: 'Брат Леофрик' },
  { en: 'Sister Elfrida', ru: 'Сестра Эльфрида' },
  { en: 'Brother Dunstan', ru: 'Брат Дунстан' },
  { en: 'Sister Godiva', ru: 'Сестра Годива' },
  { en: 'Brother Aldwin', ru: 'Брат Олдвин' },
  { en: 'Sister Isolde', ru: 'Сестра Изольда' },
  { en: 'Brother Bertram', ru: 'Брат Бертрам' },
  { en: 'Sister Yvette', ru: 'Сестра Иветт' },
  { en: 'Brother Everard', ru: 'Брат Эверард' },
  { en: 'Sister Matilda', ru: 'Сестра Матильда' },
  { en: 'Brother Hugh', ru: 'Брат Хью' },
  { en: 'Sister Beatrice', ru: 'Сестра Беатрис' },
  { en: 'Brother Ralph', ru: 'Брат Ральф' },
  { en: 'Sister Joan', ru: 'Сестра Джоан' },
  { en: 'Brother Miles', ru: 'Брат Майлз' },
  { en: 'Sister Margery', ru: 'Сестра Маргери' },
  { en: 'Brother Guy', ru: 'Брат Гай' },
  { en: 'Sister Cecily', ru: 'Сестра Сесили' },
  { en: 'Brother Odo', ru: 'Брат Одо' },
  { en: 'Sister Ethelreda', ru: 'Сестра Этельреда' },
  { en: 'Brother Fulke', ru: 'Брат Фулк' },
  { en: 'Sister Rosamund', ru: 'Сестра Розамунд' },
  { en: 'Brother Ivo', ru: 'Брат Иво' },
  { en: 'Sister Aveline', ru: 'Сестра Авелин' },
  { en: 'Brother Lambert', ru: 'Брат Ламберт' },
  { en: 'Sister Sybil', ru: 'Сестра Сибил' },
  { en: 'Brother Gerard', ru: 'Брат Джерард' },
  { en: 'Sister Petronilla', ru: 'Сестра Петронилла' },
  { en: 'Brother Thurstan', ru: 'Брат Терстан' },
  { en: 'Sister Hawise', ru: 'Сестра Хавис' },
];

/** Pool for `npc.stall.byid.<id>.v1` — index `(id * 13) % length`. */
export const STALL_GEN_NAMES: Bilingual[] = [
  { en: 'Henric Cotlar', ru: 'Хенрик Котлар' },
  { en: 'Giles Turner', ru: 'Джайлз Тёрнер' },
  { en: 'Ralf Cordwainer', ru: 'Ральф Кордуайнер' },
  { en: 'Drogo Mercer', ru: 'Дрого Мерсер' },
  { en: 'Ivo Chapman', ru: 'Иво Чепмен' },
  { en: 'Baldwin Fuller', ru: 'Болдуин Фуллер' },
  { en: 'Reynard Webber', ru: 'Рейнард Веббер' },
  { en: 'Sigeric Dyer', ru: 'Сигерик Дайер' },
  { en: 'Ailwin Skinner', ru: 'Эйлвин Скиннер' },
  { en: 'Leofwine Bowyer', ru: 'Леофвин Бойер' },
  { en: 'Ordgar Fletcher', ru: 'Ордгар Флетчер' },
  { en: 'Wulfhere Smith', ru: 'Вульфхере Смит' },
  { en: 'Eadric Mason', ru: 'Эадрик Мейсон' },
  { en: 'Cynric Thatcher', ru: 'Кинрик Тэтчер' },
  { en: 'Beorn Carver', ru: 'Беорн Карвер' },
  { en: 'Grimwald Cooper', ru: 'Гримвальд Купер' },
  { en: 'Sæward Potter', ru: 'Севард Поттер' },
  { en: 'Tovi Weaver', ru: 'Тови Уивер' },
  { en: 'Ketil Wright', ru: 'Кетил Райт' },
  { en: 'Orm Gardiner', ru: 'Орм Гарднер' },
  { en: 'Hakon Fisher', ru: 'Хакон Фишер' },
  { en: 'Snorri Cook', ru: 'Снорри Кук' },
  { en: 'Ulf Baker', ru: 'Ульф Бейкер' },
  { en: 'Eirik Brewer', ru: 'Эйрик Брюэр' },
  { en: 'Halfdan Butcher', ru: 'Халфдан Бутчер' },
  { en: 'Ragnar Chandler', ru: 'Рагнар Чендлер' },
  { en: 'Sweyn Saddler', ru: 'Свейн Седдлер' },
  { en: 'Toki Horner', ru: 'Токи Хорнер' },
  { en: 'Grim Kelner', ru: 'Грим Келнер' },
  { en: 'Arnulf Spicer', ru: 'Арнульф Спайсер' },
  { en: 'Berenger Glover', ru: 'Беренгер Гловер' },
  { en: 'Fulk Haberdasher', ru: 'Фулк Хабердэшер' },
  { en: 'Payn Cutler', ru: 'Пейн Катлер' },
  { en: 'Jocelin Nailor', ru: 'Джоселин Нейлор' },
  { en: 'Eluard Whittler', ru: 'Элуард Виттлер' },
  { en: 'Gervase Joiner', ru: 'Джервейс Джойнер' },
  { en: 'Hamo Sawyer', ru: 'Хамо Сойер' },
  { en: 'Isembard Planer', ru: 'Изембард Планер' },
  { en: 'Lancelin Turner', ru: 'Ланселин Тёрнер' },
  { en: 'Mainard Wheeler', ru: 'Майнард Уилер' },
  { en: 'Odo Carter', ru: 'Одо Картер' },
  { en: 'Pagan Porter', ru: 'Пэган Портер' },
  { en: 'Quentin Badger', ru: 'Квентин Баджер' },
  { en: 'Roric Packer', ru: 'Рорик Пакер' },
  { en: 'Savin Binder', ru: 'Савин Байндер' },
  { en: 'Turold Tenter', ru: 'Турольд Тентер' },
  { en: 'Ulric Shearer', ru: 'Ульрик Ширер' },
  { en: 'Warin Fuller', ru: 'Варин Фуллер' },
  { en: 'Yvain Mercer', ru: 'Ивейн Мерсер' },
  { en: 'Zacharias Draper', ru: 'Захария Дрейпер' },
  { en: 'Alured Hosier', ru: 'Альюред Хозиер' },
  { en: 'Brien Leatherseller', ru: 'Бриен Лезерселлер' },
  { en: 'Conan Fellmonger', ru: 'Конан Феллмонгер' },
  { en: 'Denzil Woolman', ru: 'Дензил Вулман' },
  { en: 'Elwin Silkman', ru: 'Элвин Силкман' },
  { en: 'Faramund Linendraper', ru: 'Фарамунд Линендрейпер' },
  { en: 'Garin Mercer', ru: 'Гарин Мерсер' },
  { en: 'Helias Chapman', ru: 'Хелиас Чепмен' },
  { en: 'Isembart Cordwainer', ru: 'Изембарт Кордуайнер' },
  { en: 'Jordan Webber', ru: 'Джордан Веббер' },
  { en: 'Kenelm Dyer', ru: 'Кенелм Дайер' },
  { en: 'Laurin Skinner', ru: 'Лаурин Скиннер' },
  { en: 'Milo Bowyer', ru: 'Мило Бойер' },
  { en: 'Nigel Fletcher', ru: 'Найджел Флетчер' },
  { en: 'Osmund Smith', ru: 'Осмунд Смит' },
  { en: 'Percy Mason', ru: 'Перси Мейсон' },
  { en: 'Quince Thatcher', ru: 'Квинс Тэтчер' },
  { en: 'Roland Carver', ru: 'Роланд Карвер' },
  { en: 'Sayer Cooper', ru: 'Сайер Купер' },
  { en: 'Turgis Potter', ru: 'Тургис Поттер' },
  { en: 'Urian Weaver', ru: 'Уриан Уивер' },
  { en: 'Virgil Wright', ru: 'Вергил Райт' },
  { en: 'Wymar Gardiner', ru: 'Вимар Гарднер' },
  { en: 'York Fisher', ru: 'Йорк Фишер' },
  { en: 'Zeno Cook', ru: 'Зено Кук' },
  { en: 'Alaric Baker', ru: 'Аларик Бейкер' },
  { en: 'Brice Brewer', ru: 'Брайс Брюэр' },
  { en: 'Crispin Butcher', ru: 'Криспин Бутчер' },
  { en: 'Drust Chandler', ru: 'Друст Чендлер' },
  { en: 'Emeric Saddler', ru: 'Эмерик Седдлер' },
  { en: 'Faramir Horner', ru: 'Фарамир Хорнер' },
  { en: 'Gawain Kelner', ru: 'Гавейн Келнер' },
  { en: 'Hadwin Spicer', ru: 'Хадвин Спайсер' },
  { en: 'Idris Glover', ru: 'Идрис Гловер' },
  { en: 'Jasper Haberdasher', ru: 'Джаспер Хабердэшер' },
  { en: 'Kenrick Cutler', ru: 'Кенрик Катлер' },
  { en: 'Lionel Nailor', ru: 'Лайонел Нейлор' },
  { en: 'Merrick Whittler', ru: 'Меррик Виттлер' },
  { en: 'Nestor Joiner', ru: 'Нестор Джойнер' },
  { en: 'Owyn Sawyer', ru: 'Оуин Сойер' },
  { en: 'Piers Planer', ru: 'Пирс Планер' },
  { en: 'Quinlan Turner', ru: 'Квинлан Тёрнер' },
  { en: 'Roric Wheeler', ru: 'Рорик Уилер' },
  { en: 'Seward Carter', ru: 'Сьюард Картер' },
  { en: 'Tancred Porter', ru: 'Танкред Портер' },
  { en: 'Ulfric Badger', ru: 'Ульфрик Баджер' },
  { en: 'Valens Packer', ru: 'Валенс Пакер' },
  { en: 'Wulfhere Binder', ru: 'Вульфхере Байндер' },
  { en: 'Yngvar Tenter', ru: 'Ингвар Тентер' },
  { en: 'Zebulon Shearer', ru: 'Зевулон Ширер' },
  { en: 'Athelstan Fuller', ru: 'Ательстан Фуллер' },
  { en: 'Baldric Mercer', ru: 'Балдрик Мерсер' },
  { en: 'Cerdic Chapman', ru: 'Сердик Чепмен' },
  { en: 'Dunstan Cordwainer', ru: 'Дунстан Кордуайнер' },
  { en: 'Eadwine Webber', ru: 'Эадвин Веббер' },
  { en: 'Frith Dyer', ru: 'Фрит Дайер' },
  { en: 'Godric Skinner', ru: 'Годрик Скиннер' },
  { en: 'Hereward Bowyer', ru: 'Херуорд Бойер' },
  { en: 'Ingulf Fletcher', ru: 'Ингульф Флетчер' },
  { en: 'Kenelm Smith', ru: 'Кенелм Смит' },
  { en: 'Leofric Mason', ru: 'Леофрик Мейсон' },
  { en: 'Mærwynn Thatcher', ru: 'Мервинн Тэтчер' },
];

export function npcByIdKeyLabel(locale: Locale, key: string | undefined): string | undefined {
  if (!key) return undefined;
  let m = /^npc\.elder\.byid\.(\d+)\.v1$/.exec(key);
  if (m?.[1]) {
    const id = parseInt(m[1], 10);
    const row = ELDER_GEN_NAMES[(id * 3) % ELDER_GEN_NAMES.length]!;
    return locale === 'ru' ? row.ru : row.en;
  }
  m = /^npc\.medic\.byid\.(\d+)\.v1$/.exec(key);
  if (m?.[1]) {
    const id = parseInt(m[1], 10);
    const row = MEDIC_GEN_NAMES[(id * 7) % MEDIC_GEN_NAMES.length]!;
    return locale === 'ru' ? row.ru : row.en;
  }
  m = /^npc\.stall\.byid\.(\d+)\.v1$/.exec(key);
  if (m?.[1]) {
    const id = parseInt(m[1], 10);
    const row = STALL_GEN_NAMES[(id * 13) % STALL_GEN_NAMES.length]!;
    return locale === 'ru' ? row.ru : row.en;
  }
  return undefined;
}
