import { getDb } from '../database/database';
import { localTimestamp } from '../utils/time';

export interface SystemConfigEntry {
  key: string;
  value: string;
  description?: string;
  updated_at?: string;
}

export function getAllSystemConfigs(): SystemConfigEntry[] {
  const db = getDb();
  return db.prepare('SELECT key, value, description, updated_at FROM system_configs ORDER BY key').all() as SystemConfigEntry[];
}

export function getSystemConfig(key: string): string | null {
  const db = getDb();
  const row = db.prepare('SELECT value FROM system_configs WHERE key = ?').get(key) as { value: string } | undefined;
  return row?.value ?? null;
}

export function updateSystemConfig(key: string, value: string): void {
  const db = getDb();
  db.prepare(
    "INSERT INTO system_configs (key, value, updated_at, description) VALUES (?, ?, ?, '') ON CONFLICT(key) DO UPDATE SET value = excluded.value, updated_at = excluded.updated_at"
  ).run(key, value, localTimestamp());
}

export function updateSystemConfigs(entries: { key: string; value: string }[]): void {
  const db = getDb();
  const upsert = db.prepare(
    "INSERT INTO system_configs (key, value, updated_at, description) VALUES (?, ?, ?, '') ON CONFLICT(key) DO UPDATE SET value = excluded.value, updated_at = excluded.updated_at"
  );
  const tx = db.transaction((items: { key: string; value: string }[]) => {
    for (const item of items) {
      upsert.run(item.key, item.value, localTimestamp());
    }
  });
  tx(entries);
}
