import * as vscode from "vscode"; import type { DevToolsConfigSnapshot } from "./config"; import { runDevToolsScript, makeOpenAnythingHandler, registerDevToolsOpenFolder } from "./devToolsExecutor"; const PANEL_ID = "anythingllmDevTools"; const panelTitle = "AnythingLLM dev tools"; const buildHtml = ( webview: vscode.Webview, extensionUri: vscode.Uri, ): string => { const scriptUri = webview.asWebviewUri( vscode.Uri.joinPath(extensionUri, "media", "devTools.js"), ); const csp = webview.cspSource; return ` ${panelTitle}

  

`;
};

export const showDevToolsPanel = (
  context: vscode.ExtensionContext,
  readConfig: () => DevToolsConfigSnapshot,
): void => {
  const column = vscode.ViewColumn.Beside;
  const panel = vscode.window.createWebviewPanel(
    PANEL_ID,
    panelTitle,
    column,
    {
      enableScripts: true,
      retainContextWhenHidden: true,
      localResourceRoots: [
        vscode.Uri.joinPath(context.extensionUri, "media"),
      ],
    },
  );

  panel.webview.html = buildHtml(panel.webview, context.extensionUri);

  const openFolder = registerDevToolsOpenFolder(vscode);

  panel.webview.onDidReceiveMessage(
    (msg: unknown) => {
      void (async () => {
        if (typeof msg !== "object" || msg === null) {
          return;
        }
        const rec = msg as Record;
        if (rec.type !== "run") {
          return;
        }
        const text = typeof rec.text === "string" ? rec.text : "";
        const use = readConfig();
        const openBrowser = makeOpenAnythingHandler(vscode, use.anythingBaseUrl);
        try {
          const result = await runDevToolsScript(text, {
            anythingBaseUrl: use.anythingBaseUrl,
            anythingApiKey: use.anythingApiKey,
            reposApiBaseUrl: use.reposApiBaseUrl,
            reposApiToken: use.reposApiToken,
            openFolder,
            openAnythingWorkspaceInBrowser: openBrowser,
          });
          panel.webview.postMessage({ type: "result", text: result });
        } catch (e) {
          const m = e instanceof Error ? e.message : String(e);
          panel.webview.postMessage({ type: "result", text: `ERROR: ${m}` });
        }
      })();
    },
    undefined,
    context.subscriptions,
  );
};