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

/**
 * ZCode — ~/.zcode/skills/designpaca/ (전역) 또는 .zcode/skills/designpaca/ (프로젝트).
 * ZCode 도 Claude Code 와 같은 SKILL.md 규약을 그대로 읽으므로 변환이 없다.
 *
 * ZCode 는 중립 경로인 .agents/skills 도 함께 읽지만 그쪽은 agents 타깃이 쓴다.
 * 같은 스킬을 두 곳에 깔면 하나가 다른 하나를 섀도잉할 뿐이므로
 * ZCode 전용 경로에만 쓴다.
 */
export const zcode: TargetAdapter = {
  id: "zcode",
  label: "ZCode",
  hint: "~/.zcode/skills/designpaca — SKILL.md 그대로",
  scopes: ["user", "project"],

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

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