// Наполняет коллекции `documents_ru`/`documents_en` в PocketBase реальным
// контентом раздела /docs (сейчас там только два "заглушечных" документа с
// обрубленным текстом — этот скрипт заменяет их полным набором и добавляет
// остальные документы).
//
// Не хранит и не запрашивает секреты нигде, кроме переменных окружения самого
// оператора — админ-доступ к PocketBase не должен попадать ни в код, ни в чат.
//
// Запуск:
//   PB_URL=https://netrunner-vpn.com/cms-api \
//   PB_ADMIN_EMAIL=you@example.com \
//   PB_ADMIN_PASSWORD='...' \
//   node scripts/seed-docs.mjs [--lang=ru|en|all] [--apply]
//
// По умолчанию — dry-run для обоих языков (только печатает, что будет
// сделано). Чтобы реально записать в PocketBase, добавь флаг --apply.

import PocketBase from "pocketbase";
import { DOCS_RU } from "./docs-content.ru.mjs";
import { DOCS_EN } from "./docs-content.en.mjs";

const PB_URL = process.env.PB_URL || "https://netrunner-vpn.com/cms-api";
const APPLY = process.argv.includes("--apply");
const langArg = process.argv.find((a) => a.startsWith("--lang="));
const LANGS = langArg
  ? langArg.split("=")[1] === "all"
    ? ["ru", "en"]
    : [langArg.split("=")[1]]
  : ["ru", "en"];

// Старые "заглушечные" записи в проде названы иначе, чем новые полноценные
// документы, которые их заменяют, — без этой карты скрипт создал бы дубликаты
// вместо замены обрубленных стаб-текстов.
const LEGACY_TITLE_ALIASES = {
  ru: {
    "Политика конфиденциальности": "Политика конфиденциальности (Privacy Policy)",
    "Условия использования": "Условия использования и оплаты (Terms of Use)",
  },
  en: {
    "Privacy Policy": "Privacy Policy",
    "Terms of Use": "Terms of Use & Payment",
  },
};

const DOCS_BY_LANG = { ru: DOCS_RU, en: DOCS_EN };

async function seedLang(pb, lang) {
  const docs = DOCS_BY_LANG[lang];
  const aliases = LEGACY_TITLE_ALIASES[lang];
  const collection = pb.collection(`documents_${lang}`);
  const existing = await collection.getFullList({ requestKey: null });
  const byTitle = new Map(existing.map((r) => [r.title, r]));

  console.log(`\n=== documents_${lang} ===`);
  for (const doc of docs) {
    const match = byTitle.get(doc.title) || byTitle.get(aliases[doc.title]);
    if (match) {
      console.log(`UPDATE  "${doc.title}" (id=${match.id})`);
      if (APPLY) await collection.update(match.id, doc);
    } else {
      console.log(`CREATE  "${doc.title}"`);
      if (APPLY) await collection.create(doc);
    }
  }
  console.log(`Всего документов: ${docs.length}`);
}

async function main() {
  const pb = new PocketBase(PB_URL);

  if (APPLY) {
    const email = process.env.PB_ADMIN_EMAIL;
    const password = process.env.PB_ADMIN_PASSWORD;
    if (!email || !password) {
      console.error(
        "Нужны PB_ADMIN_EMAIL и PB_ADMIN_PASSWORD в окружении для записи (--apply).",
      );
      process.exit(1);
    }
    await pb.collection("_superusers").authWithPassword(email, password);
  } else {
    console.log(
      "[dry-run] Ничего не записываю. Проверь вывод ниже, затем перезапусти с --apply.",
    );
  }

  for (const lang of LANGS) {
    await seedLang(pb, lang);
  }

  if (!APPLY) console.log("\nЭто был dry-run — добавь --apply, чтобы записать.");
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
