import { readManifest, removeInstall, tildify, type TargetId } from "@designpaca/core";
import { dim, heading, ok, warn } from "../ui.ts";

export async function runUninstall(opts: {
  targets?: TargetId[];
  force?: boolean;
}): Promise<number> {
  const manifest = await readManifest();
  const targets = manifest.installs.filter(
    (i) => !opts.targets || opts.targets.length === 0 || opts.targets.includes(i.target),
  );

  if (targets.length === 0) {
    console.log(warn("제거할 설치 기록이 없습니다"));
    return 0;
  }

  console.log(heading("제거"));
  for (const rec of targets) {
    const res = await removeInstall(rec, { force: opts.force });
    console.log(ok(`${rec.target} (${rec.scope}) — ${res.removed.length}개 제거  ${dim(tildify(rec.root))}`));
    if (res.keptModified.length > 0) {
      console.log(
        warn(`  직접 수정한 파일 ${res.keptModified.length}개는 남겼다 (--force 로 함께 지운다)`),
      );
      for (const p of res.keptModified.slice(0, 5)) console.log(dim(`    ${tildify(p)}`));
    }
  }
  return 0;
}
