import { getLogs } from "@plugos/plugos-syscall/sandbox";
import {
  getText,
  hideBhs,
  showBhs,
} from "@silverbulletmd/plugos-silverbullet-syscall/editor";
import { parseMarkdown } from "@silverbulletmd/plugos-silverbullet-syscall/markdown";
import { getServerLogs } from "@silverbulletmd/plugos-silverbullet-syscall/sandbox";
import { invokeFunction } from "@silverbulletmd/plugos-silverbullet-syscall/system";

export async function parseServerPageCommand() {
  console.log(await invokeFunction("server", "parsePage", await getText()));
}

export async function parsePageCommand() {
  parsePage(await getText());
}

export async function parsePage(text: string) {
  console.log("AST", JSON.stringify(await parseMarkdown(text), null, 2));
}

export async function showLogsCommand() {
  let clientLogs = await getLogs();
  let serverLogs = await getServerLogs();

  await showBhs(
    `
    <style>
    #client-log-header {
        position: absolute;
        left: 0;
        top: 5px;
    }
    #server-log-header {
        position: absolute;
        right: 0;
        top: 5px;
        width: 50%;
    }
    #client-log {
        position: absolute;
        left: 0;
        top: 30px;
        bottom: 0;
        width: 50%;
        overflow: scroll;
    }
    #server-log {
        position: absolute;
        right: 0;
        top: 30px;
        bottom: 0;
        width: 50%;
        overflow: scroll;
    }
    </style>
    <div id="client-log-header">Client logs (max 100)</div>
    <div id="client-log">
      <pre>${clientLogs
        .map((le) => `[${le.level}] ${le.message}`)
        .join("\n")}</pre>
    </div>
    <div id="server-log-header">Server logs (max 100)</div>
    <div id="server-log">
      <pre>${serverLogs
        .map((le) => `[${le.level}] ${le.message}`)
        .join("\n")}</pre>
    </div>`,
    `
      var clientDiv = document.getElementById("client-log");
      clientDiv.scrollTop = clientDiv.scrollHeight;
      var serverDiv = document.getElementById("server-log");
      serverDiv.scrollTop = serverDiv.scrollHeight;
      if(window.reloadInterval) {
        clearInterval(window.reloadInterval);
      }
      window.reloadInterval = setInterval(() => {
        sendEvent("log:reload");
      }, 1000);
      `
  );
}

export async function hideBhsCommand() {
  await hideBhs();
}