// src/install/opencode.ts
import { existsSync, readFileSync } from "node:fs";
import { join } from "node:path";
import type { InstallContext, InstallResult } from "./types.ts";
import { secureAtomicWriteSync } from "./blocks/secureWrite.ts";

export function installOpencode(ctx: InstallContext): InstallResult {
  const path = join(ctx.home, ".config", "opencode", "opencode.json");
  let cfg: Record<string, unknown> = {};
  if (existsSync(path)) {
    try {
      const parsed: unknown = JSON.parse(readFileSync(path, "utf8"));
      if (typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)) {
        cfg = parsed as Record<string, unknown>;
      }
    } catch {
      cfg = {};
    }
  }
  const provider = (cfg.provider ??= {}) as Record<string, unknown>;
  const anthropic = (provider.anthropic ??= {}) as Record<string, unknown>;
  const options = (anthropic.options ??= {}) as Record<string, unknown>;
  options.baseURL = `http://127.0.0.1:${ctx.port}`;
  secureAtomicWriteSync(path, JSON.stringify(cfg, null, 2));
  return { ok: true, path, message: `opencode → ${options.baseURL}` };
}
