// ObserveTab: renders the dashboard pill bar over the engine registry plus
// a shared window selector, one card per seed chart (each fetching at the
// default window), and refetches every card when the window switches. The
// api-client is mocked; cards stay in their loading state.

import { afterEach, describe, expect, it, vi } from "vitest";
import { fireEvent, render, screen } from "@testing-library/react";
import { ObserveTab } from "@/components/regions/ObserveTab";
import { fetchObserveSeries } from "@/lib/api-client";

vi.mock("@/lib/api-client", () => ({
  fetchObserveSeries: vi.fn(),
}));

const mockedFetch = vi.mocked(fetchObserveSeries);

afterEach(() => {
  vi.clearAllMocks();
});

describe("ObserveTab", () => {
  it("renders the pill bar and one loading card per seed chart, fetching each at the default window", async () => {
    mockedFetch.mockReturnValue(new Promise(() => {}) as never);
    render(<ObserveTab regionKey="aws-us-west-2" />);

    expect(screen.getByText("Observe")).toBeTruthy();
    expect(screen.getByRole("button", { name: "VMCluster" })).toBeTruthy();
    for (const title of [
      "CPU Utilization (Max)",
      "CPU Utilization (Min)",
      "Memory Utilization (Max)",
      "Memory Utilization (Min)",
    ]) {
      expect(screen.getByText(title), title).toBeTruthy();
    }
    expect(screen.getAllByText("loading chart…").length).toBe(4);

    for (const chart of ["cpu-max", "cpu-min", "mem-max", "mem-min"]) {
      expect(mockedFetch).toHaveBeenCalledWith("aws-us-west-2", "vmcluster", chart, "24h");
    }
    expect(mockedFetch).toHaveBeenCalledTimes(4);
  });

  it("refetches every card when the shared window preset changes", async () => {
    mockedFetch.mockReturnValue(new Promise(() => {}) as never);
    render(<ObserveTab regionKey="aws-us-west-2" />);
    fireEvent.change(screen.getByRole("combobox", { name: "trend time range" }), {
      target: { value: "7d" },
    });
    for (const chart of ["cpu-max", "cpu-min", "mem-max", "mem-min"]) {
      expect(mockedFetch).toHaveBeenCalledWith("aws-us-west-2", "vmcluster", chart, "7d");
    }
    expect(mockedFetch).toHaveBeenCalledTimes(8); // 4 at 24h + 4 at 7d
  });
});
