import fs from "node:fs";
import path from "node:path";
import type {
  AppConfig,
  DataSrcConfig,
  LdapConfig,
  PagesConfig,
  SystemScenariosConfig,
  SqlServerConfig,
  UserScenariosConfig,
} from "./types.js";

const CONFIG_DIR = process.env.BOARD_CONFIG_DIR
  ? path.resolve(process.env.BOARD_CONFIG_DIR)
  : path.join(process.cwd(), "config");

function readJson<T>(file: string): T {
  const full = path.join(CONFIG_DIR, file);
  const raw = fs.readFileSync(full, "utf8");
  return JSON.parse(raw) as T;
}

export function loadAppConfig(): AppConfig {
  return readJson<AppConfig>("app.config.json");
}

export function loadLdapConfig(): LdapConfig {
  return readJson<LdapConfig>("ldap.config.json");
}

export function loadPagesConfig(): PagesConfig {
  return readJson<PagesConfig>("pages.config.json");
}

export function loadSystemScenariosConfig(): SystemScenariosConfig {
  return readJson<SystemScenariosConfig>("scenarios.system.json");
}

export function loadUserScenariosConfig(): UserScenariosConfig {
  return readJson<UserScenariosConfig>("scenarios.users.json");
}

export function writeUserScenariosConfig(data: UserScenariosConfig): void {
  const full = path.join(CONFIG_DIR, "scenarios.users.json");
  const text = JSON.stringify(data, null, 2) + "\n";
  fs.writeFileSync(full, text, "utf8");
}

export function loadSqlServerConfig(): SqlServerConfig {
  return readJson<SqlServerConfig>("sqlserver.config.json");
}

export function loadDataSrcConfig(): DataSrcConfig {
  return readJson<DataSrcConfig>("datasrc.json");
}

export function getConfigDir(): string {
  return CONFIG_DIR;
}
