import fs from "node:fs";
import type { DebugOpts } from "../../types";
import type { IAgentDriver } from "../../agent";

export interface AIMessageRedactor {
	redactMessages(messages: any[]): string[];
}
export class OpenAIMessageRedactor implements AIMessageRedactor {
	currentUrl = "";
	debug: boolean;
	driver: IAgentDriver;

	constructor(driver: IAgentDriver, opts: DebugOpts) {
		this.driver = driver;
		this.debug = Boolean(opts.debug);
	}

	public redactMessages(messages: any[]) {
		this.currentUrl = messages[messages.length - 1].url;

		const redactMessage = this.redactMessage.bind(this);
		return messages.map(redactMessage);
	}

	redactMessage(message: any) {
		const msg = JSON.parse(JSON.stringify(message));
		if (msg.url !== this.currentUrl) {
			// msg.content = msg.redacted ?? msg.content ?? "";
		}
		msg.redacted = undefined;
		msg.url = undefined;
		return msg;
	}

	logRedacted(redactedMessages: any[]) {
		if (!this.debug) {
			return;
		}
		fs.writeFileSync(
			`context_redacted${redactedMessages.length}.json`,
			JSON.stringify(redactedMessages, null, 2),
		);
	}
}
