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

/**
 * GitHub Copilot — ~/.copilot/skills/designpaca/ (전역) 또는 .github/skills/designpaca/ (프로젝트).
 * Copilot 코딩 에이전트는 2025-12 부터 Agent Skills 규약을 지원한다.
 *
 * detect 는 보수적으로 잡는다 — `.github/` 은 Copilot 을 안 쓰는 저장소에도 흔하니까.
 * Copilot 사용 흔적(~/.copilot, 기존 .github/skills, copilot-instructions.md)이 있을 때만
 * 기본 선택에 올린다. 명시적으로 `-t copilot` 을 주면 언제든 설치할 수 있다.
 */
export const copilot: TargetAdapter = {
  id: "copilot",
  label: "GitHub Copilot",
  hint: "~/.copilot/skills/designpaca — SKILL.md 그대로",
  scopes: ["user", "project"],

  async detect(ctx: TargetContext) {
    return anyExists([
      path.join(ctx.home, ".copilot"),
      path.join(ctx.cwd, ".github", "skills"),
      path.join(ctx.cwd, ".github", "copilot-instructions.md"),
    ]);
  },

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