export type AgentKind = "opencode" | "openclaw" | "hermes";

export const AGENT_KINDS: AgentKind[] = ["opencode", "openclaw", "hermes"];

export const AGENT_LABEL: Record<AgentKind, string> = {
  opencode: "OpenCode",
  openclaw: "OpenClaw",
  hermes: "Hermes Agent",
};

export type AgentRunnerCtx = {
  agentId: string;
  hostId: string;
  name: string;
  installPath: string; // /opt
  configJson: string;
};

export type AgentRunner = {
  kind: AgentKind;
  /** Cài (lần đầu). */
  install(ctx: AgentRunnerCtx): Promise<{ ok: boolean; log: string; version?: string }>;
  /** Cập nhật lên bản mới nhất. */
  update(ctx: AgentRunnerCtx): Promise<{ ok: boolean; log: string; version?: string }>;
  /** Đọc tình trạng (đang chạy/version/pid). */
  status(ctx: AgentRunnerCtx): Promise<{
    ok: boolean;
    log: string;
    version?: string;
    running: boolean;
    pid?: number;
  }>;
  /** Khởi động background daemon (nếu có). */
  start(ctx: AgentRunnerCtx): Promise<{ ok: boolean; log: string }>;
  /** Dừng background daemon. */
  stop(ctx: AgentRunnerCtx): Promise<{ ok: boolean; log: string }>;
  /** Đọc log gần nhất (200 dòng cuối). */
  logs(ctx: AgentRunnerCtx, lines?: number): Promise<{ ok: boolean; log: string }>;
  /** Gỡ cài đặt. */
  uninstall(ctx: AgentRunnerCtx): Promise<{ ok: boolean; log: string }>;
};
