import { render, screen } from "@testing-library/react";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { vi, describe, it, expect, beforeEach } from "vitest";
import StatusPage from "../page";

const getStatus = vi.fn();
vi.mock("@/lib/checkin/api", () => ({
  checkinApi: { getStatus: (...a: unknown[]) => getStatus(...a) },
}));

// Inner CheckinStatus payload — confirmation_only (no position/ETA).
const STATUS = {
  status: "remote_check_in",
  status_label: "Checked in",
  container_count: 2,
};

async function renderPage(token = "tok1", statusToken = "st123") {
  const ui = await StatusPage({
    params: Promise.resolve({ token, statusToken }),
  });
  const qc = new QueryClient({ defaultOptions: { queries: { retry: false } } });
  return render(<QueryClientProvider client={qc}>{ui}</QueryClientProvider>);
}

describe("StatusPage", () => {
  beforeEach(() => {
    getStatus.mockReset();
  });

  it("renders the status shell from the server-fetched initial status", async () => {
    getStatus.mockResolvedValue({ data: STATUS });
    await renderPage();

    // confirmation_only → static "you're checked in", no queue position.
    expect(screen.getByText(/you're checked in/i)).toBeInTheDocument();
    expect(getStatus).toHaveBeenCalledWith("st123");
  });

  it("renders a not-found message on 404", async () => {
    getStatus.mockRejectedValue({ status: 404, message: "not found" });
    await renderPage();

    expect(
      screen.getByText(/couldn't find that check-in/i),
    ).toBeInTheDocument();
  });
});
