// @bun
import {
  init_ListItem
} from "./chunk-4e58tvcr.js";
import {
  buildCliLaunch,
  init_cliLaunch,
  spawnCli
} from "./chunk-wa8vt72w.js";
import {
  init_Dialog
} from "./chunk-tracj0s1.js";
import {
  init_overlayContext,
  useRegisterOverlay
} from "./chunk-4vz571bb.js";
import"./chunk-14p6wvsq.js";
import"./chunk-8hseq8b1.js";
import"./chunk-ddtxq6k5.js";
import"./chunk-28jd8qjx.js";
import"./chunk-djt39ze3.js";
import"./chunk-ptxteaeh.js";
import"./chunk-wd53a7m4.js";
import"./chunk-hms8ge0k.js";
import"./chunk-whpphypt.js";
import"./chunk-pht800m5.js";
import"./chunk-pjkqh1kq.js";
import"./chunk-9a9g5hbj.js";
import"./chunk-9hn8e6h1.js";
import"./chunk-rgyzsbs3.js";
import"./chunk-qn6me9n1.js";
import"./chunk-qd3r2s2n.js";
import"./chunk-djzd7tef.js";
import {
  getBridgeDisabledReason,
  init_bridgeEnabled
} from "./chunk-gyhnpbkx.js";
import {
  BRIDGE_LOGIN_INSTRUCTION,
  init_types
} from "./chunk-71sdcaq6.js";
import"./chunk-60gf7p5s.js";
import"./chunk-sj3d0nqx.js";
import"./chunk-9pk9rk2w.js";
import"./chunk-javpza6a.js";
import"./chunk-6v7bre98.js";
import"./chunk-24kv69g3.js";
import"./chunk-fcqebw9m.js";
import"./chunk-dnfd3c9s.js";
import"./chunk-15ezj4ww.js";
import"./chunk-1h284c6e.js";
import"./chunk-582g9yce.js";
import {
  init_useKeybinding
} from "./chunk-y3ztgztb.js";
import"./chunk-4spgkgr3.js";
import"./chunk-n8kbhswc.js";
import"./chunk-60fkafk2.js";
import"./chunk-fgbkrbk3.js";
import"./chunk-ssw61jfd.js";
import"./chunk-093ej2sf.js";
import"./chunk-7tfdhkpy.js";
import"./chunk-nde5ym6a.js";
import"./chunk-k8wq4qsj.js";
import"./chunk-g7d3xx1p.js";
import {
  getBridgeAccessToken,
  init_bridgeConfig
} from "./chunk-3wrx2943.js";
import"./chunk-7p9kkh0f.js";
import"./chunk-qp8cgz66.js";
import"./chunk-1mg610h2.js";
import"./chunk-93hc149s.js";
import"./chunk-935nrvdb.js";
import"./chunk-8zz4z1q3.js";
import"./chunk-nnat9jw5.js";
import"./chunk-hqxp6b72.js";
import"./chunk-4jzkqgf1.js";
import"./chunk-33rd41ng.js";
import"./chunk-f257kqw9.js";
import"./chunk-w5hnghah.js";
import"./chunk-36twraxy.js";
import"./chunk-1bkvnj0y.js";
import"./chunk-akdpcc5p.js";
import"./chunk-7rrkrej7.js";
import"./chunk-6r0bxrh6.js";
import"./chunk-d6500tvx.js";
import"./chunk-jg4bw4hp.js";
import"./chunk-epvbnq43.js";
import"./chunk-tn2sx7j6.js";
import"./chunk-6tzyv21c.js";
import"./chunk-8kf8h7xf.js";
import"./chunk-bgan4cpf.js";
import"./chunk-jmv7k0jn.js";
import"./chunk-ch4pgvwq.js";
import"./chunk-99jc4tcw.js";
import"./chunk-fghczfqt.js";
import"./chunk-vwenx8ke.js";
import"./chunk-f86mwfyd.js";
import"./chunk-v4ypszbb.js";
import"./chunk-bk6ck5c2.js";
import"./chunk-ym6j0wv1.js";
import"./chunk-hjmatcgt.js";
import"./chunk-6mdh70q0.js";
import"./chunk-ch92ycde.js";
import"./chunk-e4dsy4g1.js";
import"./chunk-326zehp8.js";
import"./chunk-kc67kt75.js";
import"./chunk-40t1d75v.js";
import"./chunk-nt5dmk8q.js";
import"./chunk-e3abfxpy.js";
import"./chunk-q44zc68f.js";
import"./chunk-fejeqe61.js";
import"./chunk-0gp4q8aq.js";
import"./chunk-hn4w9pkj.js";
import {
  Dialog,
  ListItem,
  ThemedBox_default,
  ThemedText,
  init_src,
  require_react,
  useKeybindings
} from "./chunk-0r6npc3t.js";
import {
  require_jsx_runtime
} from "./chunk-gxyx8b8w.js";
import"./chunk-j1mep9ck.js";
import"./chunk-6x35ffpx.js";
import"./chunk-1zbwhcbt.js";
import"./chunk-t0450ma3.js";
import"./chunk-0cqw3y8h.js";
import"./chunk-k1sw7km0.js";
import"./chunk-e3j7m7k2.js";
import"./chunk-sc9ycxra.js";
import"./chunk-hhta0nge.js";
import"./chunk-8wsj9fff.js";
import"./chunk-m28vg9w4.js";
import"./chunk-f8prtxs3.js";
import"./chunk-41a6f2kv.js";
import"./chunk-c1yc761e.js";
import"./chunk-c5g9shkw.js";
import {
  errorMessage,
  init_errors
} from "./chunk-byd20vdq.js";
import"./chunk-kb3758f7.js";
import"./chunk-3j8w0rq8.js";
import"./chunk-tj0dzck2.js";
import"./chunk-aeysytks.js";
import"./chunk-ns1htxgd.js";
import"./chunk-ztqzmfx1.js";
import"./chunk-6k1rsk85.js";
import"./chunk-nxzx0ey9.js";
import"./chunk-yes1my80.js";
import"./chunk-pecy49yr.js";
import"./chunk-azbab59e.js";
import"./chunk-3nk9q8dr.js";
import {
  __esm,
  __toESM
} from "./chunk-hhsxm2yr.js";

// src/commands/remoteControlServer/remoteControlServer.tsx
import { resolve } from "path";
function RemoteControlServer({ onDone }) {
  const [status, setStatus] = import_react.useState(daemonStatus);
  const [error, setError] = import_react.useState(null);
  import_react.useEffect(() => {
    if (daemonProcess && !daemonProcess.killed) {
      setStatus("running");
      return;
    }
    let cancelled = false;
    (async () => {
      const checkError = await checkPrerequisites();
      if (cancelled)
        return;
      if (checkError) {
        onDone(checkError, { display: "system" });
        return;
      }
      setStatus("starting");
      try {
        startDaemon();
        if (!cancelled) {
          setStatus("running");
          daemonStatus = "running";
          onDone("Remote Control Server started. Use /remote-control-server to manage.", { display: "system" });
        }
      } catch (err) {
        if (!cancelled) {
          const msg = errorMessage(err);
          setStatus("error");
          setError(msg);
          daemonStatus = "error";
          onDone(`Remote Control Server failed to start: ${msg}`, {
            display: "system"
          });
        }
      }
    })();
    return () => {
      cancelled = true;
    };
  }, []);
  if (status === "running" && daemonProcess && !daemonProcess.killed) {
    return /* @__PURE__ */ jsx_runtime.jsx(ServerManagementDialog, {
      onDone
    });
  }
  if (status === "error" && error) {
    return null;
  }
  return null;
}
function ServerManagementDialog({ onDone }) {
  useRegisterOverlay("remote-control-server-dialog");
  const [focusIndex, setFocusIndex] = import_react.useState(2);
  const logPreview = daemonLogs.slice(-5);
  function handleStop() {
    stopDaemon();
    onDone("Remote Control Server stopped.", { display: "system" });
  }
  function handleRestart() {
    stopDaemon();
    try {
      startDaemon();
      onDone("Remote Control Server restarted.", { display: "system" });
    } catch (err) {
      onDone(`Failed to restart: ${errorMessage(err)}`, { display: "system" });
    }
  }
  function handleContinue() {
    onDone(undefined, { display: "skip" });
  }
  const ITEM_COUNT = 3;
  useKeybindings({
    "select:next": () => setFocusIndex((i) => (i + 1) % ITEM_COUNT),
    "select:previous": () => setFocusIndex((i) => (i - 1 + ITEM_COUNT) % ITEM_COUNT),
    "select:accept": () => {
      if (focusIndex === 0) {
        handleStop();
      } else if (focusIndex === 1) {
        handleRestart();
      } else {
        handleContinue();
      }
    }
  }, { context: "Select" });
  return /* @__PURE__ */ jsx_runtime.jsx(Dialog, {
    title: "Remote Control Server",
    onCancel: handleContinue,
    hideInputGuide: true,
    children: /* @__PURE__ */ jsx_runtime.jsxs(ThemedBox_default, {
      flexDirection: "column",
      gap: 1,
      children: [
        /* @__PURE__ */ jsx_runtime.jsxs(ThemedText, {
          children: [
            "Remote Control Server is",
            " ",
            /* @__PURE__ */ jsx_runtime.jsx(ThemedText, {
              bold: true,
              color: "success",
              children: "running"
            }),
            daemonProcess ? ` (PID: ${daemonProcess.pid})` : ""
          ]
        }),
        logPreview.length > 0 && /* @__PURE__ */ jsx_runtime.jsxs(ThemedBox_default, {
          flexDirection: "column",
          children: [
            /* @__PURE__ */ jsx_runtime.jsx(ThemedText, {
              dimColor: true,
              children: "Recent logs:"
            }),
            logPreview.map((line, i) => /* @__PURE__ */ jsx_runtime.jsx(ThemedText, {
              dimColor: true,
              children: line
            }, i))
          ]
        }),
        /* @__PURE__ */ jsx_runtime.jsxs(ThemedBox_default, {
          flexDirection: "column",
          children: [
            /* @__PURE__ */ jsx_runtime.jsx(ListItem, {
              isFocused: focusIndex === 0,
              children: /* @__PURE__ */ jsx_runtime.jsx(ThemedText, {
                children: "Stop server"
              })
            }),
            /* @__PURE__ */ jsx_runtime.jsx(ListItem, {
              isFocused: focusIndex === 1,
              children: /* @__PURE__ */ jsx_runtime.jsx(ThemedText, {
                children: "Restart server"
              })
            }),
            /* @__PURE__ */ jsx_runtime.jsx(ListItem, {
              isFocused: focusIndex === 2,
              children: /* @__PURE__ */ jsx_runtime.jsx(ThemedText, {
                children: "Continue"
              })
            })
          ]
        }),
        /* @__PURE__ */ jsx_runtime.jsx(ThemedText, {
          dimColor: true,
          children: "Enter to select \xB7 Esc to continue"
        })
      ]
    })
  });
}
async function checkPrerequisites() {
  const disabledReason = await getBridgeDisabledReason();
  if (disabledReason) {
    return disabledReason;
  }
  if (!getBridgeAccessToken()) {
    return BRIDGE_LOGIN_INSTRUCTION;
  }
  return null;
}
function startDaemon() {
  const dir = resolve(".");
  const launch = buildCliLaunch(["daemon", "start", `--dir=${dir}`]);
  const child = spawnCli(launch, {
    cwd: dir,
    stdio: ["ignore", "pipe", "pipe"],
    detached: false
  });
  daemonProcess = child;
  daemonLogs = [];
  child.stdout?.on("data", (data) => {
    const lines = data.toString().trimEnd().split(`
`);
    for (const line of lines) {
      daemonLogs.push(line);
      if (daemonLogs.length > MAX_LOG_LINES) {
        daemonLogs.shift();
      }
    }
  });
  child.stderr?.on("data", (data) => {
    const lines = data.toString().trimEnd().split(`
`);
    for (const line of lines) {
      daemonLogs.push(`[err] ${line}`);
      if (daemonLogs.length > MAX_LOG_LINES) {
        daemonLogs.shift();
      }
    }
  });
  child.on("exit", (code, signal) => {
    daemonProcess = null;
    daemonStatus = "stopped";
    daemonLogs.push(`[daemon] exited (code=${code ?? "unknown"}, signal=${signal})`);
  });
  child.on("error", (err) => {
    daemonProcess = null;
    daemonStatus = "error";
    daemonLogs.push(`[daemon] error: ${err.message}`);
  });
}
function stopDaemon() {
  if (daemonProcess && !daemonProcess.killed) {
    daemonProcess.kill("SIGTERM");
    const pid = daemonProcess.pid;
    setTimeout(() => {
      try {
        if (pid)
          process.kill(pid, 0);
        if (daemonProcess && !daemonProcess.killed) {
          daemonProcess.kill("SIGKILL");
        }
      } catch {}
    }, 1e4);
  }
  daemonProcess = null;
  daemonStatus = "stopped";
}
async function call(onDone, _context, _args) {
  return /* @__PURE__ */ jsx_runtime.jsx(RemoteControlServer, {
    onDone
  });
}
var import_react, jsx_runtime, daemonProcess = null, daemonStatus = "stopped", daemonLogs, MAX_LOG_LINES = 50;
var init_remoteControlServer = __esm(() => {
  init_bridgeEnabled();
  init_bridgeConfig();
  init_types();
  init_Dialog();
  init_ListItem();
  init_overlayContext();
  init_src();
  init_useKeybinding();
  init_cliLaunch();
  init_errors();
  import_react = __toESM(require_react(), 1);
  jsx_runtime = __toESM(require_jsx_runtime(), 1);
  daemonLogs = [];
});
init_remoteControlServer();

export {
  call
};

//# debugId=E94B51A7882F6C3264756E2164756E21
//# sourceMappingURL=chunk-kh7qncq1.js.map
