/** Persistent configuration (config/config.json, schema 1). */
import { call } from "../transport";
import type { AppConfig } from "../types";

export interface ConfigPatch {
  ui?: Partial<Omit<AppConfig["ui"], "sidebar">> & { sidebar?: Partial<AppConfig["ui"]["sidebar"]> };
  updates?: Partial<Pick<AppConfig["updates"], "channel" | "autoCheck">>;
  plugins?: Partial<AppConfig["plugins"]>;
  security?: Partial<AppConfig["security"]>;
  /** Required whenever `security` changes. */
  masterPassword?: string;
}

export interface LanguageInfo { code: string; name: string; englishName?: string }

export const config = Object.freeze({
  get: () => call<AppConfig>("core_config_get", "config:get"),
  update: (patch: ConfigPatch) => call<AppConfig>("core_config_update", "config:update", patch),
  languages: () => call<LanguageInfo[]>("core_i18n_languages", "i18n:languages")
});
