import { sql } from '../db.js';

export type PlatformSettingsRow = {
  openai_api_key: string | null;
  openai_base_url: string | null;
  updated_at: string;
};

/** Loads the singleton platform row (id = default). */
export async function getPlatformSettings(): Promise<PlatformSettingsRow | null> {
  try {
    const [row] = await sql<PlatformSettingsRow[]>`
      SELECT openai_api_key, openai_base_url, updated_at::text
      FROM platform_settings
      WHERE id = 'default'
    `;
    return row ?? null;
  } catch (e: unknown) {
    // Fresh DBs before migration 008, or legacy volumes: avoid 500 on every settings read
    const code = (e as { code?: string })?.code;
    if (code === '42P01') return null;
    throw e;
  }
}

/**
 * Partial update: only include fields you want to change.
 * Pass `openai_api_key: null` or `''` to clear the stored key.
 */
export async function updatePlatformSettings(patch: {
  openai_api_key?: string | null;
  openai_base_url?: string | null;
}): Promise<void> {
  const next = await getPlatformSettings();
  if (!next) throw new Error('platform_settings missing — apply migration 008_platform_settings.sql');

  const openai_api_key =
    patch.openai_api_key !== undefined
      ? patch.openai_api_key === null || patch.openai_api_key === ''
        ? null
        : patch.openai_api_key.trim()
      : next.openai_api_key;

  const openai_base_url =
    patch.openai_base_url !== undefined
      ? patch.openai_base_url === null || patch.openai_base_url === ''
        ? null
        : patch.openai_base_url.trim()
      : next.openai_base_url;

  await sql`
    UPDATE platform_settings
    SET openai_api_key = ${openai_api_key},
        openai_base_url = ${openai_base_url},
        updated_at = NOW()
    WHERE id = 'default'
  `;
}
