import path from "node:path";
import { exists } from "../fsx.ts";
import type { TargetAdapter, TargetContext } from "../types.ts";
import { anyExists, scopeRoot, skillDirActions } from "./common.ts";

/**
 * 중립 경로 `.agents/skills` — 특정 제품의 경로가 아니라 Agent Skills 규약 자체의 홈이다.
 *
 * "스펙은 통일됐는데 경로가 갈렸다"가 현재 생태계의 문제라면, 이 디렉터리가 그 답이다.
 * Cursor · Antigravity · ZCode 가 프로젝트와 홈에서 이 경로를 읽고, 같은 규약을 채택하는
 * 하네스가 계속 늘고 있다. 어떤 도구를 쓰는지와 무관하게 **한 번 깔면 다 같이 잡는 자리**다.
 *
 * 경로:
 *   워크스페이스  <root>/.agents/skills/designpaca/
 *   전역         ~/.agents/skills/designpaca/
 */
export const agents: TargetAdapter = {
  id: "agents",
  label: "중립 경로 (.agents)",
  hint: "~/.agents/skills/designpaca — 이 규약을 읽는 하네스라면 무엇이든 잡는다",
  scopes: ["user", "project"],

  async detect(ctx: TargetContext) {
    return anyExists([path.join(ctx.home, ".agents"), path.join(ctx.cwd, ".agents")]);
  },

  async plan(ctx: TargetContext) {
    const root = scopeRoot(
      ctx,
      [".agents", "skills", "designpaca"],
      [".agents", "skills", "designpaca"],
    );
    return {
      target: this.id,
      scope: ctx.scope,
      root,
      actions: skillDirActions(root, ctx.skill),
      alreadyInstalled: await exists(path.join(root, "SKILL.md")),
    };
  },
};
