/**
 * seed-red-book-phase2.js
 * +20 видов: мхи/лишайники, пресноводные, редкие насекомые, птицы болот, ночные хищники
 * +10 квестов
 * Запуск: node src/db/seed-red-book-phase2.js  (из папки backend/)
 * Идемпотентен — не дублирует существующее.
 */
require('./migrate');
const db = require('./db');

/* ── helpers ── */
const groupRow   = n  => db.prepare('SELECT id FROM rb_groups   WHERE name_ru = ?').get(n);
const habitatRow = t  => db.prepare('SELECT id FROM rb_habitats WHERE type    = ?').get(t);
const getId      = n  => db.prepare('SELECT id FROM rb_species  WHERE name_ru = ?').get(n)?.id || null;

const insSp  = db.prepare(`
  INSERT INTO rb_species
    (group_id, habitat_id, name_ru, name_be, name_lat, category, by_category,
     description, interesting_fact, threats, conservation, where_to_see,
     photo_url, model_type, population_trend, biomass_kg, season_active)
  VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
`);
const insReg = db.prepare('INSERT OR IGNORE INTO rb_species_regions (species_id, region_code) VALUES (?,?)');
const insWeb = db.prepare('INSERT OR IGNORE INTO rb_food_web (predator_id, prey_id, strength) VALUES (?,?,?)');

function addSp(d) {
  const existing = db.prepare('SELECT id FROM rb_species WHERE name_ru = ?').get(d.name_ru);
  if (existing) return existing.id;
  const gid = groupRow(d.group)?.id;
  const hid = habitatRow(d.habitat)?.id || null;
  if (!gid) { console.warn('Group not found:', d.group); return null; }
  const id = insSp.run(
    gid, hid,
    d.name_ru, d.name_be || '', d.name_lat || '',
    d.category, d.by_category || 'III',
    d.description || '', d.fact || '',
    JSON.stringify(d.threats || []),
    d.conservation || '', d.where_to_see || '',
    d.photo || '', d.model || 'silhouette',
    JSON.stringify(d.trend || []),
    d.biomass || 0,
    JSON.stringify(d.seasons || []),
  ).lastInsertRowid;
  (d.regions || []).forEach(r => insReg.run(id, r));
  return id;
}

/* ════════════════════════════════════════════════════════════════════════
   БЛОК 1 — ВИДЫ
   ════════════════════════════════════════════════════════════════════════ */
db.exec('BEGIN');

/* ── ПТИЦЫ (3) ─────────────────────────────────────────────────────── */

const kamyshevka = addSp({
  group: 'Птицы', habitat: 'wetland',
  name_ru: 'Вертлявая камышевка', name_be: 'Вярцёжная чаротнiца', name_lat: 'Acrocephalus paludicola',
  category: 'CR', by_category: 'I',
  description: 'Одна из наиболее угрожаемых перелётных птиц Европы. Гнездится исключительно в низинных болотах с осоково-злаковой растительностью. Беларусь — мировой центр гнездования, здесь обитает до 80 % мировой популяции. Зимует в западной Африке.',
  fact: 'Беларусь является главным «домом» вертлявой камышевки — здесь гнездится большинство всех особей планеты.',
  threats: ['Осушение болот', 'Зарастание гнездовых угодий', 'Пожары в поймах', 'Потеря зимовок в Африке'],
  conservation: 'Охрана низинных болот. Восстановление обводнённых пойм. Мониторинг популяции.',
  where_to_see: 'Споровское болото (Брестская обл.), Ельня (Витебская обл.), Дикое болото',
  biomass: 0.013, seasons: ['5','6','7','8'],
  trend: [{year:1990,count_estimate:8000,source:'IUCN'},{year:2000,count_estimate:4500,source:'BirdLife'},{year:2010,count_estimate:2800,source:'BirdLife'},{year:2024,count_estimate:2100,source:'АПБ'}],
  regions: ['vitebsk','grodno','brest','minsk'],
});

const dupen = addSp({
  group: 'Птицы', habitat: 'wetland',
  name_ru: 'Дупель', name_be: 'Дупель', name_lat: 'Gallinago media',
  category: 'EN', by_category: 'II',
  description: 'Скрытный кулик заливных лугов и болот. Самцы собираются на токах, где демонстрируют оперение и трясутся всем телом. После спаривания самка одна воспитывает птенцов. Ночной образ жизни затрудняет учёт.',
  fact: 'Самцы дупеля токуют по ночам на «арене» — постоянном месте сбора, которое используется десятилетиями.',
  threats: ['Осушение пойменных лугов', 'Раннее сенокошение', 'Браконьерство на пролёте'],
  conservation: 'Запрет сенокошения до августа на ключевых участках. Сохранение влажных лугов.',
  where_to_see: 'Ельня, Освейское озеро, пойма р. Припять',
  biomass: 0.18, seasons: ['4','5','6','7','8','9'],
  trend: [{year:1995,count_estimate:1200,source:'НООО БПО'},{year:2010,count_estimate:650,source:'НООО БПО'},{year:2024,count_estimate:400,source:'НООО БПО'}],
  regions: ['vitebsk','minsk','grodno','brest'],
});

const kobchik = addSp({
  group: 'Птицы', habitat: 'meadow',
  name_ru: 'Кобчик', name_be: 'Кабчык', name_lat: 'Falco vespertinus',
  category: 'VU', by_category: 'III',
  description: 'Изящный сокол размером с галку. Самцы — шиферно-серые с рыжей «штанишками», самки рябые. Охотится на крупных насекомых — прямокрылых, стрекоз, жуков. Гнездится колониями в чужих гнёздах — грачей и сорок. Перелётный, зимует в Африке.',
  fact: 'Кобчик охотится как ласточка — хватает насекомых прямо в воздухе на бреющем полёте над лугами.',
  threats: ['Деградация пойменных лугов', 'Применение пестицидов (уменьшение насекомых)', 'Уничтожение колоний грачей'],
  conservation: 'Сохранение лугов. Запрет уничтожения грачиных колоний.',
  where_to_see: 'Припятский НП, луга Брестской и Гомельской областей',
  biomass: 0.16, seasons: ['5','6','7','8','9'],
  trend: [{year:1990,count_estimate:900,source:'БО'},{year:2005,count_estimate:550,source:'БО'},{year:2024,count_estimate:320,source:'АПБ'}],
  regions: ['brest','gomel','minsk','vitebsk'],
});

/* ── МЛЕКОПИТАЮЩИЕ (2) ──────────────────────────────────────────────── */

const vyhuhol = addSp({
  group: 'Млекопитающие', habitat: 'river',
  name_ru: 'Выхухоль русская', name_be: 'Расамаха расійская', name_lat: 'Desmana moschata',
  category: 'CR', by_category: 'I',
  description: 'Один из древнейших зверьков Земли — живой ископаемый. Обитает в старицах, заводях и медленных протоках рек Припятского бассейна. Почти слепа, ориентируется по обонянию и осязанию через вибриссы на хоботке. Выделяет мускусный секрет. Под угрозой исчезновения в Беларуси.',
  fact: 'Выхухоль существует без изменений более 30 миллионов лет — её предки жили рядом с носорогами и мамонтами.',
  threats: ['Загрязнение рек', 'Осушение пойм', 'Рыболовные сети', 'Хищники (норка американская)'],
  conservation: 'Охрана пойменных угодий р. Припять. Борьба с инвазивной норкой американской. Заповедники.',
  where_to_see: 'Пойма р. Припять (Гомельская и Брестская обл.), Припятский НП',
  biomass: 0.42, seasons: ['1','2','3','4','5','6','7','8','9','10','11','12'],
  trend: [{year:1990,count_estimate:1500,source:'НАН'},{year:2000,count_estimate:700,source:'НАН'},{year:2010,count_estimate:280,source:'НАН'},{year:2024,count_estimate:80,source:'IUCN'}],
  regions: ['gomel','brest'],
});

const nochnitza = addSp({
  group: 'Млекопитающие', habitat: 'river',
  name_ru: 'Ночница прудовая', name_be: 'Начніца сажалкавая', name_lat: 'Myotis dasycneme',
  category: 'EN', by_category: 'II',
  description: 'Крупная летучая мышь, охотящаяся над открытой водой. Подхватывает насекомых с поверхности прудов и рек с помощью крыльев или хвостовой перепонки. Зимует в подземельях. Образует небольшие колонии в постройках. Чувствительна к беспокойству зимовок.',
  fact: 'Ночница прудовая — настоящий рыбак: она «читает» рябь воды ушами, определяя местонахождение добычи под поверхностью.',
  threats: ['Уничтожение зимовок', 'Загрязнение водоёмов', 'Ветроэнергетика', 'Применение пестицидов'],
  conservation: 'Охрана зимовок (подземелья, форты). Мониторинг колоний. Сохранение прибрежных водоёмов.',
  where_to_see: 'Гродненские подземелья, водохранилища Минской обл., Беловежская пуща',
  biomass: 0.016, seasons: ['5','6','7','8','9'],
  trend: [{year:2000,count_estimate:600,source:'Bat Conservation'},{year:2015,count_estimate:350,source:'БО'},{year:2024,count_estimate:220,source:'БО'}],
  regions: ['minsk','grodno','brest','vitebsk'],
});

/* ── РАСТЕНИЯ (2) ───────────────────────────────────────────────────── */

const yatrish = addSp({
  group: 'Растения', habitat: 'meadow',
  name_ru: 'Ятрышник шлемоносный', name_be: 'Ятрышнік шлемавідны', name_lat: 'Orchis militaris',
  category: 'VU', by_category: 'III',
  description: 'Редкая наземная орхидея с необычными лилово-розовыми соцветиями, лепестки которых складываются в форму человечка с «руками» и «ногами». Растёт на известняковых лугах и в светлых лесах. Требует симбиоза с почвенными грибами для прорастания семян.',
  fact: 'Семена ятрышника невесомы — в 1 грамме до 50 000 штук. Но без почвенного гриба-симбионта ни одно не прорастёт.',
  threats: ['Распашка и застройка лугов', 'Выпас скота', 'Сбор растений'],
  conservation: 'Охрана мест обитания. Запрет сбора. Создание питомников.',
  where_to_see: 'Мозырские гряды, Новогрудская возвышенность, меловые склоны р. Сож',
  biomass: 0.04, seasons: ['5','6'],
  trend: [{year:1990,count_estimate:3200,source:'НАН'},{year:2010,count_estimate:1800,source:'НАН'},{year:2024,count_estimate:950,source:'НАН'}],
  regions: ['brest','grodno','minsk','gomel'],
});

const rosynka = addSp({
  group: 'Растения', habitat: 'wetland',
  name_ru: 'Росянка английская', name_be: 'Расіца англійская', name_lat: 'Drosera anglica',
  category: 'EN', by_category: 'II',
  description: 'Насекомоядное растение сфагновых болот. Длинные листья-ловушки с липкими железистыми ворсинками ловят и переваривают мух и комаров. Получает азот и фосфор из добычи, компенсируя бедность болотной почвы. Крупнейшая из белорусских росянок.',
  fact: 'Росянка английская переваривает насекомых за 24–48 часов, выделяя ферменты, аналогичные желудочному соку животных.',
  threats: ['Осушение верховых болот', 'Торфоразработка', 'Изменение гидрологии'],
  conservation: 'Сохранение верховых сфагновых болот. Контроль торфоразработок.',
  where_to_see: 'Ельня, Обстерно, Мох Великий (Витебская обл.)',
  biomass: 0.008, seasons: ['6','7','8'],
  trend: [{year:1990,count_estimate:18000,source:'НАН'},{year:2010,count_estimate:9000,source:'НАН'},{year:2024,count_estimate:5200,source:'НАН'}],
  regions: ['vitebsk','grodno','minsk'],
});

/* ── НАСЕКОМЫЕ (4) ──────────────────────────────────────────────────── */

const zhuk_olen = addSp({
  group: 'Насекомые', habitat: 'forest',
  name_ru: 'Жук-олень', name_be: 'Жук-алень', name_lat: 'Lucanus cervus',
  category: 'EN', by_category: 'II',
  description: 'Крупнейший жук Европы: самцы достигают 8 см. «Рога» — гипертрофированные верхние челюсти-мандибулы. Используются в турнирах за самку. Личинка живёт 5–8 лет в гнилой древесине дуба, питаясь разложившейся древесиной. Взрослый жук живёт всего 3–4 недели.',
  fact: 'Самец жука-оленя в рыцарском поединке захватывает соперника рогами и сбрасывает с ветки — как настоящий турнир средневековых рыцарей.',
  threats: ['Вырубка старых дубрав', 'Удаление пней и гниющей древесины', 'Уличное освещение (дезориентирует)'],
  conservation: 'Сохранение старых дубрав и пней. Создание «мёртвой древесины» в парках.',
  where_to_see: 'Беловежская пуща, Налибокская пуща, Гродненская пуща',
  biomass: 0.006, seasons: ['6','7','8'],
  trend: [{year:1990,count_estimate:12000,source:'НАН'},{year:2010,count_estimate:5500,source:'НАН'},{year:2024,count_estimate:2800,source:'НАН'}],
  regions: ['brest','grodno','minsk'],
});

const dozorshik = addSp({
  group: 'Насекомые', habitat: 'wetland',
  name_ru: 'Дозорщик-повелитель', name_be: 'Дазорца-ўладар', name_lat: 'Anax imperator',
  category: 'VU', by_category: 'III',
  description: 'Крупнейшая стрекоза Беларуси с размахом крыльев до 10 см. Самцы патрулируют водоёмы, агрессивно охраняя территорию. Охотится на других стрекоз, бабочек и даже небольших рыб. Личинка — активный хищник, живущий в воде 2–3 года.',
  fact: 'Дозорщик-повелитель преследует и ловит добычу с точностью до 97% — лучший результат среди всех хищников Земли.',
  threats: ['Эвтрофикация водоёмов', 'Осушение болот', 'Применение пестицидов'],
  conservation: 'Охрана водно-болотных угодий. Ограничение применения инсектицидов.',
  where_to_see: 'Нарочанский НП, Споровское болото, пруды Брестской обл.',
  biomass: 0.0009, seasons: ['6','7','8','9'],
  trend: [{year:2000,count_estimate:5000,source:'ЭО'},{year:2015,count_estimate:2800,source:'ЭО'},{year:2024,count_estimate:1600,source:'ЭО'}],
  regions: ['brest','gomel','grodno','minsk'],
});

const shmel = addSp({
  group: 'Насекомые', habitat: 'meadow',
  name_ru: 'Шмель моховой', name_be: 'Шмель імшысты', name_lat: 'Bombus muscorum',
  category: 'EN', by_category: 'II',
  description: 'Рыжевато-жёлтый шмель сырых лугов и болот. Один из немногих видов шмелей, гнездящихся на поверхности — в старых птичьих гнёздах или кустах мха. Важнейший опылитель растений заболоченных угодий. Страдает от потери местообитаний сильнее других шмелей.',
  fact: 'Шмель моховой — «горячая машина»: перед полётом в холодный день он вибрирует мышцами, разогревая тело до +35°C при температуре воздуха около 0°C.',
  threats: ['Интенсификация сельского хозяйства', 'Осушение лугов', 'Применение пестицидов', 'Болезни (Nosema)'],
  conservation: 'Сохранение разнотравных сырых лугов. Запрет инсектицидов на природных территориях.',
  where_to_see: 'Пойменные луга Полесья, заказник «Ельня», Витебские озёра',
  biomass: 0.0004, seasons: ['4','5','6','7','8','9'],
  trend: [{year:1990,count_estimate:50000,source:'ЭО'},{year:2010,count_estimate:18000,source:'ЭО'},{year:2024,count_estimate:7000,source:'ЭО'}],
  regions: ['vitebsk','minsk','grodno','brest'],
});

const krasotEl = addSp({
  group: 'Насекомые', habitat: 'forest',
  name_ru: 'Красотел пахучий', name_be: 'Прыгажун духмяны', name_lat: 'Calosoma sycophanta',
  category: 'VU', by_category: 'III',
  description: 'Охотник за гусеницами: жук поднимается на деревья в погоне за добычей и может съесть до 400 гусениц за сезон. Окраска переливается всеми цветами радуги — синим, зелёным, золотистым. При угрозе выбрызгивает едкую жидкость с резким запахом.',
  fact: 'Красотел пахучий — сознательный лесник: он специально охотится на видах-вредителях (шелкопряд, непарный шелкопряд), защищая лес от объедания.',
  threats: ['Применение инсектицидов', 'Вырубка широколиственных лесов', 'Сбор коллекционерами'],
  conservation: 'Отказ от химических методов борьбы с вредителями. Охрана широколиственных лесов.',
  where_to_see: 'Беловежская пуща, Налибокская пуща, широколиственные леса Гродненщины',
  biomass: 0.003, seasons: ['5','6','7','8'],
  trend: [{year:1990,count_estimate:8000,source:'НАН'},{year:2010,count_estimate:3500,source:'НАН'},{year:2024,count_estimate:1800,source:'НАН'}],
  regions: ['brest','grodno','minsk','vitebsk'],
});

/* ── РЫБЫ (3) ───────────────────────────────────────────────────────── */

const forel = addSp({
  group: 'Рыбы', habitat: 'river',
  name_ru: 'Форель ручьевая', name_be: 'Стронга ручайная', name_lat: 'Salmo trutta fario',
  category: 'VU', by_category: 'III',
  description: 'Пёстрая хищная рыба холодных прозрачных ручьёв и малых рек. Индикатор чистоты воды: погибает при малейшем загрязнении. Требует хорошую аэрацию и чистый гравийный субстрат для нереста. В Беларуси — на южной границе ареала, обитает только в реках Нарочанского бассейна.',
  fact: 'Форель настолько требовательна к кислороду, что может жить только там, где вода кристально чистая. Там, где есть форель — вода питьевого качества.',
  threats: ['Загрязнение рек', 'Нагрев воды', 'Браконьерство', 'Мелиорация'],
  conservation: 'Охрана малых рек. Контроль качества воды. Ограничение рыбалки. Искусственное разведение.',
  where_to_see: 'Реки Нарочь, Страча, Сервечь (Минская обл.), р. Щара (Гродненская обл.)',
  biomass: 0.35, seasons: ['1','2','3','4','5','6','7','8','9','10','11','12'],
  trend: [{year:1990,count_estimate:4200,source:'ВТ'},{year:2005,count_estimate:2100,source:'ВТ'},{year:2024,count_estimate:900,source:'ВТ'}],
  regions: ['vitebsk','grodno','minsk'],
});

const bystryanka = addSp({
  group: 'Рыбы', habitat: 'river',
  name_ru: 'Быстрянка обыкновенная', name_be: 'Быстранка звычайная', name_lat: 'Alburnoides bipunctatus',
  category: 'EN', by_category: 'II',
  description: 'Маленькая серебристая рыбка быстрых чистых рек с выраженным течением. Держится у поверхности стайками, питаясь насекомыми. Чувствительна к загрязнению воды. Один из исчезающих видов пресноводных рыб Беларуси, встречается единично в реках западной части страны.',
  fact: 'Быстрянка — «наземная» рыба: до 80% её рациона составляют упавшие в воду насекомые — комары, мухи, падёнки.',
  threats: ['Загрязнение рек', 'Зарегулирование стока', 'Конкуренция с инвазивными видами'],
  conservation: 'Охрана малых рек с быстрым течением. Мониторинг популяции.',
  where_to_see: 'Реки Зельвянка, Россь, Нёман (Гродненская обл.)',
  biomass: 0.018, seasons: ['4','5','6','7','8','9','10'],
  trend: [{year:1990,count_estimate:15000,source:'НАН'},{year:2010,count_estimate:5000,source:'НАН'},{year:2024,count_estimate:1200,source:'НАН'}],
  regions: ['grodno','brest','minsk'],
});

const umbra = addSp({
  group: 'Рыбы', habitat: 'wetland',
  name_ru: 'Умбра европейская', name_be: 'Умбра еўрапейская', name_lat: 'Umbra krameri',
  category: 'CR', by_category: 'I',
  description: 'Реликтовая рыбка — живой свидетель ледникового периода. Обитает только в медленно текущих водотоках и болотных канавах Полесья. Может переносить высыхание, зарываясь в ил. Дышит атмосферным воздухом при нехватке кислорода. Крупнейшая популяция в Европе — в Припятском полесье.',
  fact: 'Умбра — одна из немногих рыб, которая пережила все ледниковые периоды, прячась в рефугиях болот. Ей более 5 миллионов лет.',
  threats: ['Осушение болот', 'Углубление канав', 'Загрязнение воды', 'Вселение хищных рыб'],
  conservation: 'Охрана болотных водотоков Полесья. Мониторинг популяции. Разведение в неволе.',
  where_to_see: 'Припятский НП, болота Столинского района (Брестская обл.), пойма Ствиги',
  biomass: 0.025, seasons: ['1','2','3','4','5','6','7','8','9','10','11','12'],
  trend: [{year:1990,count_estimate:3500,source:'НАН'},{year:2005,count_estimate:1200,source:'НАН'},{year:2024,count_estimate:300,source:'IUCN'}],
  regions: ['brest','gomel'],
});

/* ── ГРИБЫ (2) ──────────────────────────────────────────────────────── */

const felhodon = addSp({
  group: 'Грибы', habitat: 'conifer',
  name_ru: 'Феллодон слитый', name_be: 'Фелодон злiты', name_lat: 'Phellodon confluens',
  category: 'EN', by_category: 'II',
  description: 'Редкий коралловидный гриб хвойных и смешанных лесов. Несколько плодовых тел часто сливаются в одну неправильную форму, откуда и название. Серовато-белый, с тонкими иглами на нижней поверхности шляпки. Индикатор старых ненарушенных лесов. Занесён в Красные книги 12 стран.',
  fact: 'Феллодон слитый растёт только в лесах, которым не менее 150 лет — он служит биологическим маркером древних экосистем.',
  threats: ['Рубки главного пользования', 'Нарушение лесной подстилки', 'Рекреационная нагрузка'],
  conservation: 'Сохранение старовозрастных лесов. Организация микозаповедников.',
  where_to_see: 'Беловежская пуща, Налибокская пуща, хвойные леса Витебской обл.',
  biomass: 0.06, seasons: ['8','9','10'],
  trend: [{year:1990,count_estimate:200,source:'НАН'},{year:2010,count_estimate:85,source:'НАН'},{year:2024,count_estimate:40,source:'НАН'}],
  regions: ['vitebsk','minsk','grodno','brest'],
});

const gidnellum = addSp({
  group: 'Грибы', habitat: 'forest',
  name_ru: 'Гиднеллум синеющий', name_be: 'Гiднелум сiнеючы', name_lat: 'Hydnellum caeruleum',
  category: 'VU', by_category: 'III',
  description: 'Необычный ежовый гриб с сине-фиолетовым или голубовато-серым молодым плодовым телом, темнеющим до тёмно-коричневого. Растёт в мшистых хвойных лесах, образуя микоризу с соснами и елями. Очень горький на вкус, несъедобен. Исчезает при нарушении лесной экосистемы.',
  fact: 'Гиднеллум синеющий настолько редок, что находка даже одного плодового тела считается значимым событием для микологов всей Европы.',
  threats: ['Лесозаготовки', 'Удаление мохового покрова', 'Загрязнение атмосферного воздуха'],
  conservation: 'Выявление и охрана местонахождений. Сохранение мшистых ельников.',
  where_to_see: 'Налибокская пуща, Борисовско-Березинский резерват',
  biomass: 0.04, seasons: ['8','9','10'],
  trend: [{year:2000,count_estimate:60,source:'НАН'},{year:2015,count_estimate:28,source:'НАН'},{year:2024,count_estimate:15,source:'НАН'}],
  regions: ['vitebsk','minsk','grodno'],
});

/* ── МХИ И ЛИШАЙНИКИ (4) ────────────────────────────────────────────── */

const buksbaumiya = addSp({
  group: 'Мхи и лишайники', habitat: 'conifer',
  name_ru: 'Буксбаумия безлистная', name_be: 'Буксбаумiя бязлістая', name_lat: 'Buxbaumia aphylla',
  category: 'EN', by_category: 'II',
  description: 'Один из самых необычных мхов: почти без листьев, с единственным крупным непропорциональным спорангием на тонкой ножке. Споровая коробочка напоминает панцирь черепахи. Растёт на гниющих пнях хвойных деревьев. Исчезает вместе с исчезновением гниющей древесины в заготовительных лесах.',
  fact: 'Буксбаумия безлистная проводит почти всю жизнь как невидимая нить микоризы — листовая часть появляется лишь на несколько недель для спороношения.',
  threats: ['Уборка гнилой древесины', 'Интенсивные рубки', 'Нарушение лесной подстилки'],
  conservation: 'Сохранение пней и гниющей древесины в лесах. Организация «мёртвого дерева» в заказниках.',
  where_to_see: 'Ельники Витебской и Минской обл., Беловежская пуща',
  biomass: 0.001, seasons: ['9','10','11','3','4'],
  trend: [{year:1990,count_estimate:800,source:'НАН'},{year:2010,count_estimate:320,source:'НАН'},{year:2024,count_estimate:150,source:'НАН'}],
  regions: ['vitebsk','minsk','grodno','brest'],
});

const meesiya = addSp({
  group: 'Мхи и лишайники', habitat: 'wetland',
  name_ru: 'Меезия трёхгранная', name_be: 'Меезiя трохгранная', name_lat: 'Meesia triquetra',
  category: 'VU', by_category: 'III',
  description: 'Болотный мох с характерными трёхгранными листьями, образующий плотные дернины в основаниях сфагновых кочек. Вид-индикатор ненарушенных верховых болот, чувствителен к изменению гидрологического режима. В Беларуси находится на южной границе ареала и встречается крайне редко.',
  fact: 'Меезия трёхгранная может фиксировать свидетельства климата за последние тысячи лет — учёные читают историю болота по слоям этого мха как по книге.',
  threats: ['Осушение болот', 'Добыча торфа', 'Изменение уровня грунтовых вод'],
  conservation: 'Охрана верховых болот. Поддержание высокого уровня воды в болотных комплексах.',
  where_to_see: 'Ельня (Витебская обл.), Мох Великий, Освейское болото',
  biomass: 0.002, seasons: ['1','2','3','4','5','6','7','8','9','10','11','12'],
  trend: [{year:1990,count_estimate:500,source:'НАН'},{year:2010,count_estimate:200,source:'НАН'},{year:2024,count_estimate:90,source:'НАН'}],
  regions: ['vitebsk','minsk'],
});

const usnea = addSp({
  group: 'Мхи и лишайники', habitat: 'conifer',
  name_ru: 'Уснея длиннейшая', name_be: 'Уснея найдаўжэйшая', name_lat: 'Usnea longissima',
  category: 'CR', by_category: 'I',
  description: 'Бородатый лишайник, свисающий с ветвей хвойных деревьев нитями длиной до 3 метров. Требует исключительно чистого воздуха и высокой влажности. Был широко распространён в старых лесах Беларуси, но исчез почти повсеместно из-за загрязнения воздуха и вырубок. Сегодня — в единичных местонахождениях.',
  fact: 'Уснея длиннейшая растёт со скоростью 1–2 мм в год, а её трёхметровые нити означают столетие жизни. Найти её — значит найти вековой нетронутый лес.',
  threats: ['Загрязнение воздуха', 'Вырубка старых хвойных лесов', 'Изменение климата'],
  conservation: 'Строгая охрана мест произрастания. Мониторинг качества воздуха. Охрана старолесий.',
  where_to_see: 'Налибокская пуща, отдельные участки Витебской обл.',
  biomass: 0.012, seasons: ['1','2','3','4','5','6','7','8','9','10','11','12'],
  trend: [{year:1990,count_estimate:120,source:'НАН'},{year:2005,count_estimate:35,source:'НАН'},{year:2024,count_estimate:8,source:'НАН'}],
  regions: ['vitebsk','grodno'],
});

const peltigera = addSp({
  group: 'Мхи и лишайники', habitat: 'forest',
  name_ru: 'Пельтигера горизонтальная', name_be: 'Пельцiгера гарызантальная', name_lat: 'Peltigera horizontalis',
  category: 'VU', by_category: 'III',
  description: 'Крупный листоватый лишайник с горизонтально распластанным слоевищем, вырастающим до 20 см в диаметре. Серо-голубой сверху, с заметными нитями гиф и цианобактерий на нижней поверхности. Растёт на замшелых стволах и основаниях деревьев в старых широколиственных лесах. Фиксирует атмосферный азот.',
  fact: 'Пельтигера — симбиоз гриба, водорослей и цианобактерий в одном организме. Она единственная из лишайников способна удобрять почву, фиксируя воздушный азот.',
  threats: ['Вырубка широколиственных лесов', 'Рекреационное вытаптывание', 'Загрязнение воздуха'],
  conservation: 'Сохранение старых широколиственных лесов. Ограничение рекреационной нагрузки.',
  where_to_see: 'Беловежская пуща, Налибокская пуща, старые широколиственные леса Гродненщины',
  biomass: 0.006, seasons: ['1','2','3','4','5','6','7','8','9','10','11','12'],
  trend: [{year:1990,count_estimate:350,source:'НАН'},{year:2010,count_estimate:140,source:'НАН'},{year:2024,count_estimate:70,source:'НАН'}],
  regions: ['vitebsk','minsk','grodno','brest'],
});

db.exec('COMMIT');
console.log('✓ Виды добавлены');
console.log(`  Всего видов: ${db.prepare('SELECT COUNT(*) as n FROM rb_species').get().n}`);

/* ════════════════════════════════════════════════════════════════════════
   БЛОК 2 — ПИЩЕВЫЕ СВЯЗИ
   ════════════════════════════════════════════════════════════════════════ */
db.exec('BEGIN');

const links = [
  // Орлан охотится на лебедей (более активно)
  [getId('Орлан-белохвост'), getId('Лебедь-шипун'),          0.25],
  [getId('Орлан-белохвост'), getId('Лебедь-кликун'),         0.20],
  // Кобчик ест насекомых
  [kobchik,                  getId('Аполлон'),                0.50],
  [kobchik,                  getId('Богомол обыкновенный'),   0.30],
  [kobchik,                  shmel,                           0.50],
  [kobchik,                  dozorshik,                       0.40],
  // Вертлявая камышевка ест насекомых болот
  [kamyshevka,               shmel,                           0.20],
  [kamyshevka,               dozorshik,                       0.15],
  // Красотел ест бабочек/жуков
  [krasotEl,                 getId('Аполлон'),                0.60],
  [krasotEl,                 getId('Махаон'),                  0.50],
  [krasotEl,                 zhuk_olen,                       0.30],
  // Форель ест быстрянку и другую рыбу
  [forel,                    bystryanka,                      0.80],
  [forel,                    getId('Хариус европейский'),     0.40],
  [forel,                    getId('Ручьевая минога'),        0.30],
  // Умбра — мелкий хищник
  [umbra,                    bystryanka,                      0.30],
  // Крупные рыбы едят форель
  [getId('Сом обыкновенный'), forel,                          0.40],
  [getId('Выдра речная'),     forel,                          0.60],
  [getId('Выдра речная'),     bystryanka,                     0.30],
  // Норка и выдра охотятся на выхухоль
  [getId('Европейская норка'), vyhuhol,                       0.60],
  [getId('Выдра речная'),      vyhuhol,                       0.20],
  // Ночница ест насекомых над водой
  [nochnitza,                 shmel,                          0.30],
  [nochnitza,                 dozorshik,                      0.40],
  // Жук-олень поедает соки деревьев (связь через растения если есть)
  // Дупель и камышевка — косвенные связи через экосистему
].filter(([p, q]) => p && q);

links.forEach(([p, q, s]) => {
  try { insWeb.run(p, q, s); } catch {}
});

db.exec('COMMIT');
console.log(`  Пищевых связей добавлено: ${links.length}`);
console.log(`  Всего пищевых связей: ${db.prepare('SELECT COUNT(*) as n FROM rb_food_web').get().n}`);

/* ════════════════════════════════════════════════════════════════════════
   БЛОК 3 — КВЕСТЫ (10 новых)
   ════════════════════════════════════════════════════════════════════════ */
db.exec('BEGIN');

function addQuest(title, description, speciesNames, xp, badge) {
  const existing = db.prepare('SELECT id FROM rb_quests WHERE title = ?').get(title);
  if (existing) { console.log(`  Квест уже существует: ${title}`); return; }
  const ids = speciesNames.map(n => getId(n)).filter(Boolean);
  if (ids.length < speciesNames.length) {
    console.warn(`  Квест "${title}": не найдены виды!`, speciesNames.filter(n => !getId(n)));
  }
  db.prepare('INSERT INTO rb_quests (title, description, species_ids, xp_reward, badge_slug) VALUES (?,?,?,?,?)').run(
    title, description, JSON.stringify(ids), xp, badge
  );
}

addQuest(
  'Птицы болот',
  'Болота Беларуси — дом для редчайших птиц Европы. Найдите серого журавля, большого подорлика, большого кроншнепа, вертлявую камышевку и дупеля. Узнайте, почему без болот эти виды исчезнут с планеты.',
  ['Серый журавль', 'Большой подорлик', 'Большой кроншнеп', 'Вертлявая камышевка', 'Дупель'],
  220, 'quest_bog_birds'
);

addQuest(
  'Ночные хищники',
  'Пока мы спим, лес живёт своей жизнью. Исследуйте тайных обитателей ночи: воробьиного и домового сычей, широкоушку и прудовую ночницу. Узнайте, как эхолокация превращает темноту в охотничьи угодья.',
  ['Воробьиный сыч', 'Сыч домовый', 'Широкоушка европейская', 'Ночница прудовая'],
  180, 'quest_night_hunters'
);

addQuest(
  'Диковинки Витебщины',
  'Витебская область — северный форпост Беларуси со своими уникальными видами. Откройте краснозобую казарку, лобелию Дортмана, вертлявую камышевку, форель ручьевую и уснею длиннейшую — виды, которых больше нигде не встретить.',
  ['Краснозобая казарка', 'Лобелия Дортмана', 'Вертлявая камышевка', 'Форель ручьевая', 'Уснея длиннейшая'],
  230, 'quest_vitebsk'
);

addQuest(
  'Царство грибов',
  'Мир грибов гораздо больше того, что мы видим. Трюфель, решёточник, спарасис, ёж гриб, феллодон и гиднеллум — это не еда, это живая история леса. Найдите всех шестерых и узнайте, почему грибы — хранители экосистемы.',
  ['Трюфель летний', 'Решёточник красный', 'Спарасис курчавый (грибная капуста)', 'Ёж гриб (герций)', 'Феллодон слитый', 'Гиднеллум синеющий'],
  300, 'quest_fungi'
);

addQuest(
  'Мир мхов и лишайников',
  'Мхи и лишайники — первооткрыватели суши, они появились раньше динозавров. Найдите лобарию, кладонию, буксбаумию, меезию, уснею и пельтигеру — шесть хранителей нетронутых лесов и болот Беларуси.',
  ['Лобария лёгочная', 'Кладония звёздчатая', 'Буксбаумия безлистная', 'Меезия трёхгранная', 'Уснея длиннейшая', 'Пельтигера горизонтальная'],
  280, 'quest_mosses'
);

addQuest(
  'Легенды Полесья',
  'Полесье — болотный рай, один из последних в Европе. Его населяют легендарные жители: европейская норка, болотная черепаха, альдрованда, выхухоль русская и умбра европейская — реликты, пережившие ледниковые периоды.',
  ['Европейская норка', 'Черепаха болотная', 'Альдрованда пузырчатая', 'Выхухоль русская', 'Умбра европейская'],
  350, 'quest_polesye'
);

addQuest(
  'Хранители леса',
  'Лес держится на хищниках. Рысь, бурый медведь, жук-олень, усач альпийский и красотел пахучий — звенья одной цепи. Когда исчезает один хищник, лес начинает умирать. Узнайте, как они связаны между собой.',
  ['Рысь евразийская', 'Бурый медведь', 'Жук-олень', 'Усач альпийский', 'Красотел пахучий'],
  250, 'quest_forest_guard'
);

addQuest(
  'Тайны реки',
  'Белорусские реки скрывают живых ископаемых. Выдра, стерлядь, форель, быстрянка и умбра европейская — каждый вид-индикатор показывает, здорова ли река. Найдите их всех и прочтите историю наших вод.',
  ['Речная выдра', 'Стерлядь', 'Форель ручьевая', 'Быстрянка обыкновенная', 'Умбра европейская'],
  220, 'quest_river2'
);

addQuest(
  'Летающие над водой',
  'Вода с небесами — место встречи орлана-белохвоста, скопы, двух видов лебедей и дозорщика-повелителя. Все они связаны с водой и исчезнут вместе с ней. Откройте пятёрку хозяев белорусских озёр.',
  ['Орлан-белохвост', 'Скопа', 'Лебедь-шипун', 'Лебедь-кликун', 'Дозорщик-повелитель'],
  200, 'quest_water_fliers'
);

addQuest(
  'Краса болот',
  'Болотные растения — хищники, ловушки и редкие орхидеи. Пальчатокоренник, шейхцерия, альдрованда, вертлявая камышевка и росянка английская живут в мире, где каждая капля воды на счету. Исследуйте болото изнутри.',
  ['Пальчатокоренник мясокрасный', 'Шейхцерия болотная', 'Альдрованда пузырчатая', 'Вертлявая камышевка', 'Росянка английская'],
  230, 'quest_bog_beauty'
);

db.exec('COMMIT');
console.log('✓ Квесты добавлены');
console.log(`  Всего квестов: ${db.prepare('SELECT COUNT(*) as n FROM rb_quests').get().n}`);
console.log('\n✅ seed-red-book-phase2.js завершён!');
console.log(`   Видов: ${db.prepare('SELECT COUNT(*) as n FROM rb_species').get().n}`);
console.log(`   Квестов: ${db.prepare('SELECT COUNT(*) as n FROM rb_quests').get().n}`);
console.log(`   Пищевых связей: ${db.prepare('SELECT COUNT(*) as n FROM rb_food_web').get().n}`);
