import { createRouter } from '../../create-router';
import * as sidecar from '@@/sidecar-registry';

export const desktopRouter = createRouter();

// The desktop UI asks for the password before it can open the WebSocket — and that WebSocket is what
// starts the VNC session. So this cannot wait for a session to exist: on a fresh install nothing has
// ever written the password, and answering "not configured" deadlocked the page permanently.
//
// Officer does not read the password file itself. It lives in the owner's ~/.vnc, next to the rfbauth
// file x11vnc authenticates against, and the sidecar is the process that writes both — so it is the
// process that answers for them too. `vnc:ensure-password` is idempotent: it returns the existing
// pair when both files are already there, and provisions them when they are not.
desktopRouter.get('/vnc-password', async (ctx) => {
  const user = ctx.get('user');

  if (!sidecar.isVncConnected()) {
    return ctx.json({ error: 'VNC sidecar is not connected' }, 503);
  }

  try {
    const password = await sidecar.ensureVncPassword(user.email);
    return ctx.json({ password });
  } catch (err) {
    const message = err instanceof Error ? err.message : 'Could not provision the VNC password';
    console.error('[desktop] VNC password provisioning failed:', message);
    return ctx.json({ error: message }, 500);
  }
});

// GET /vnc-status is gone. It was never called — DesktopView asks only for /vnc-password — and it was
// the sole reason the `vnc:status` command existed on the sidecar wire protocol at all. Noted as dead
// by docs/sidecar-audit-2026-07.md months ago.
