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

/**
 * Gemini CLI — ~/.gemini/skills/designpaca/ (전역) 또는 .gemini/skills/designpaca/ (프로젝트).
 * Agent Skills 규약(SKILL.md)을 Claude 와 같은 형태로 그대로 읽는다.
 *
 * Google 을 Gemini CLI 에서 Antigravity 로 옮기고 있지만 마이그레이션이 끝난 사용자만
 * Antigravity 경로(~/.gemini/antigravity-cli/skills)를 쓴다 — 아직 Gemini CLI 를 쓰는
 * 사람을 위해 이 타깃을 따로 둔다. 둘 다 쓰면 스킬이 두 번 잡히니 하나만 고른다.
 */
export const geminiCli: TargetAdapter = {
  id: "gemini-cli",
  label: "Gemini CLI",
  hint: "~/.gemini/skills/designpaca — SKILL.md 그대로 (Antigravity 전환 전)",
  scopes: ["user", "project"],

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

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