import { describe, it, expect, vi, beforeEach } from "vitest";
import { render, screen } from "@testing-library/react";
import { FluentProvider, webLightTheme } from "@fluentui/react-components";
import { ServerHealthSection } from "../ServerHealthSection";

vi.mock("../../../api/config");

import { fetchFail2BanLog, fetchServiceStatus } from "../../../api/config";

const mockedFetchServiceStatus = vi.mocked(fetchServiceStatus);
const mockedFetchFail2BanLog = vi.mocked(fetchFail2BanLog);

describe("ServerHealthSection", () => {
  beforeEach(() => {
    vi.clearAllMocks();
  });

  it("shows the version in the service health panel", async () => {
    mockedFetchServiceStatus.mockResolvedValue({
      online: true,
      version: "1.2.3",
      jail_count: 2,
      total_bans: 5,
      total_failures: 1,
      log_level: "INFO",
      log_target: "STDOUT",
    });

    mockedFetchFail2BanLog.mockResolvedValue({
      log_path: "/var/log/fail2ban.log",
      lines: ["2026-01-01 fail2ban[123]: INFO  Test"],
      total_lines: 1,
      log_level: "INFO",
      log_target: "STDOUT",
    });

    render(
      <FluentProvider theme={webLightTheme}>
        <ServerHealthSection />
      </FluentProvider>,
    );

    // The service health panel should render and include the version.
    const versionLabel = await screen.findByText("Version");
    expect(versionLabel).toBeInTheDocument();

    const versionCard = versionLabel.closest("div");
    expect(versionCard).toHaveTextContent("1.2.3");
  });
});
