import { spawn } from "child_process";

const PYTHON = "python3";
const CB26_ROOT = "/home/oem/CyberBrain26-v4";

export interface ModelMetadata {
  model_id: string;
  provider: string;
  context_window?: number;
  capabilities?: Record<string, boolean>;
  free_status?: string;
  local_available?: boolean;
  api_available?: boolean;
}

export async function fetchModelsFromBridge(): Promise<Map<string, ModelMetadata>> {
  return new Promise((resolve, reject) => {
    const proc = spawn(PYTHON, ["-m", "cyberbrain26.model_layer.cli", "list-models"], {
      cwd: CB26_ROOT,
      env: { ...process.env, PYTHONPATH: CB26_ROOT }
    });
    let stdout = "", stderr = "";
    proc.stdout.on("data", d => stdout += d);
    proc.stderr.on("data", d => stderr += d);
    proc.on("close", code => {
      if (code !== 0) reject(new Error(stderr || `exit code ${code}`));
      else {
        try {
          const list = JSON.parse(stdout.trim());
          const map = new Map<string, ModelMetadata>();
          for (const m of list) map.set(m.model_id, m);
          resolve(map);
        } catch (e) { reject(e); }
      }
    });
  });
}