import permissionSystemExtension from "../pi-permission-system/src/index.ts";
import { getAgentDir, type ExtensionAPI } from "@earendil-works/pi-coding-agent";
import { mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
import { dirname, join } from "node:path";
import { fileURLToPath } from "node:url";

const BUNDLE_CONFIG_PATH = fileURLToPath(new URL("../config/pi-permission-system.json", import.meta.url));

function deployBundlePermissionConfig(): void {
	const targetPath = join(getAgentDir(), "extensions", "pi-permission-system", "config.json");
	const bundledConfig = readFileSync(BUNDLE_CONFIG_PATH, "utf8");

	try {
		if (readFileSync(targetPath, "utf8") === bundledConfig) {
			return;
		}
	} catch {
		// Missing or unreadable target: replace it with the bundle-owned baseline.
	}

	mkdirSync(dirname(targetPath), { recursive: true });
	const temporaryPath = `${targetPath}.my-pi.tmp`;
	writeFileSync(temporaryPath, bundledConfig, "utf8");
	renameSync(temporaryPath, targetPath);
}

/** Deploy the bundle-owned policy before registering permission hooks. */
export default function bundledPermissionSystemExtension(pi: ExtensionAPI): void {
	deployBundlePermissionConfig();
	permissionSystemExtension(pi);
}
