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

/**
 * Antigravity 와 `.agents/skills` 를 읽는 도구들.
 *
 * `.agents/skills/` 는 특정 제품의 경로가 아니라 **중립 경로**다.
 * Antigravity 가 여기서 스킬을 읽고, 같은 규약을 쓰는 다른 하네스도 늘고 있다
 * (중립 경로 단독 설치는 `agents` 타깃이 담당한다).
 * SKILL.md 구조(프론트매터 + references/)가 Claude Code 와 같아서
 * 파일을 그대로 복사하면 된다 — 변환이 필요 없다.
 *
 * 경로(공식 문서 기준):
 *   워크스페이스  <root>/.agents/skills/<이름>/
 *   전역         ~/.gemini/antigravity-cli/skills/<이름>/
 *
 * 전역 경로는 Gemini CLI → Antigravity 마이그레이션 문서가 정리한 현재 위치다.
 * 예전 문서의 ~/.gemini/config/skills · ~/.gemini/skills 는 레거시다.
 *
 * 프론트매터 요구사항도 확인했다: `description` 필수, `name` 선택(없으면 폴더명).
 * 우리 SKILL.md 는 둘 다 갖고 있다.
 */
export const antigravity: TargetAdapter = {
  id: "antigravity",
  label: "Antigravity",
  hint: "전역 ~/.gemini/antigravity-cli/skills — 워크스페이스는 중립 경로 타깃과 같다",
  scopes: ["user", "project"],

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

  async plan(ctx: TargetContext) {
    const root = scopeRoot(
      ctx,
      [".gemini", "antigravity-cli", "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")),
    };
  },
};
