import { describe, expect, it } from "vitest";
import { isSystemdUnavailableDetail, renderSystemdUnavailableHints } from "./systemd-hints.js";

describe("isSystemdUnavailableDetail", () => {
  it("matches systemd unavailable error details", () => {
    expect(
      isSystemdUnavailableDetail("systemctl --user unavailable: Failed to connect to bus"),
    ).toBe(true);
    expect(
      isSystemdUnavailableDetail(
        "systemctl not available; systemd user services are required on Linux.",
      ),
    ).toBe(true);
    expect(isSystemdUnavailableDetail("permission denied")).toBe(false);
  });
});

describe("renderSystemdUnavailableHints", () => {
  it("renders WSL2-specific recovery hints", () => {
    expect(renderSystemdUnavailableHints({ wsl: true })).toEqual([
      "WSL2 needs systemd enabled: edit /etc/wsl.conf with [boot]\\nsystemd=true",
      "Then run: wsl --shutdown (from PowerShell) and reopen your distro.",
      "Verify: systemctl --user status",
    ]);
  });

  it("renders generic Linux recovery hints outside WSL", () => {
    expect(renderSystemdUnavailableHints()).toEqual([
      "systemd user services are unavailable; install/enable systemd or run the gateway under your supervisor.",
      "If you're in a container, run the gateway in the foreground instead of `openclaw gateway`.",
    ]);
  });
});
