// Обёртка над chrome.storage.local: настройки AI, профили, история.

export const DEFAULTS = {
  interceptEnabled: true,

  // Режим работы AI:
  //   "offline" — локальный анализ без ключа и внешних вызовов (по умолчанию, «работает сразу»);
  //   "direct"  — напрямую к провайдеру по ключу пользователя (BYO-key);
  //   "backend" — через Aris Backend Gateway (единая точка аудита, RAG, цитаты).
  aiMode: "offline",

  // Прямое подключение (BYO-key).
  provider: "gigachat", // см. src/ai/providers.js
  apiKey: "",
  model: "",
  baseUrl: "", // для openai-compatible / ollama / vllm / lmstudio
  temperature: 0.2,
  maxContext: 16000, // символов контекста документа, отдаваемых модели
  gigachatScope: "GIGACHAT_API_PERS", // PERS (физлица) | CORP | B2B
  yandexFolderId: "", // каталог Yandex Cloud для YandexGPT

  // Backend Gateway.
  backendUrl: "http://127.0.0.1:8000",
  backendToken: "",

  // OCR.
  ocrEnabled: true,
  ocrMode: "backend", // "backend" (PaddleOCR/Tesseract на сервере) | "local" (tesseract.js)
  ocrLanguages: ["rus", "eng"],

  // Активный профиль анализа.
  profile: "universal",

  cite_sources: true,

  // Тема просмотрщика: auto (по системе) | light | dark. По умолчанию — светлая.
  theme: "light",

  // Язык интерфейса: auto (по браузеру) | ru | en.
  language: "auto",

  // Облачная синхронизация аннотаций/закладок по sync-коду (без аккаунтов).
  syncEnabled: false,
  syncCode: "",
  syncUrl: "", // если пусто — берётся backendUrl
  collabEnabled: false, // живой обмен правками по WebSocket (требует включённой синхронизации)

  // Инверсия цветов PDF (тёмное чтение).
  invertPdf: false,

  // Режим просмотра: continuous (лента) | two (в ряд).
  viewMode: "continuous",
};

export async function getSettings() {
  const data = await chrome.storage.local.get(null);
  return { ...DEFAULTS, ...data };
}

/** Разрешает тему (auto → по системе) и проставляет data-theme на <html>. */
export function applyDocTheme(theme) {
  const resolved =
    theme === "light" || theme === "dark"
      ? theme
      : window.matchMedia("(prefers-color-scheme: light)").matches
        ? "light"
        : "dark";
  document.documentElement.dataset.theme = resolved;
  return resolved;
}

/** Записывает недостающие ключи дефолтов в storage (вызывается из SW при старте). */
export async function ensureDefaults() {
  const data = await chrome.storage.local.get(null);
  const patch = {};
  for (const [k, v] of Object.entries(DEFAULTS)) if (!(k in data)) patch[k] = v;
  if (Object.keys(patch).length) await chrome.storage.local.set(patch);
  return { ...DEFAULTS, ...data, ...patch };
}

export async function setSettings(patch) {
  await chrome.storage.local.set(patch);
}

// --- История ---------------------------------------------------------------

const HISTORY_KEYS = {
  documents: "history_documents", // [{hash, title, url, openedAt}]
  questions: "history_questions", // [{docHash, q, a, ts}]
};

export async function pushHistory(kind, item) {
  const key = HISTORY_KEYS[kind];
  if (!key) return;
  const { [key]: list = [] } = await chrome.storage.local.get(key);
  list.unshift({ ...item, ts: item.ts || Date.now() });
  await chrome.storage.local.set({ [key]: list.slice(0, 500) });
}

export async function getHistory(kind) {
  const key = HISTORY_KEYS[kind];
  if (!key) return [];
  const { [key]: list = [] } = await chrome.storage.local.get(key);
  return list;
}

export async function clearHistory(kind) {
  const key = HISTORY_KEYS[kind];
  if (key) await chrome.storage.local.remove(key);
}
