import { describe, expect, it, vi, beforeEach } from "vitest";
import { render } from "@testing-library/react";
import Home from "./page";

// Mock Next.js navigation
const mockPush = vi.fn();
vi.mock("next/navigation", () => ({
  useRouter: (): {
    push: typeof mockPush;
    replace: ReturnType<typeof vi.fn>;
    prefetch: ReturnType<typeof vi.fn>;
  } => ({
    push: mockPush,
    replace: vi.fn(),
    prefetch: vi.fn(),
  }),
}));

// Mock auth context
vi.mock("@/lib/auth/auth-context", () => ({
  useAuth: (): {
    user: null;
    isLoading: boolean;
    isAuthenticated: boolean;
    signOut: ReturnType<typeof vi.fn>;
    refreshSession: ReturnType<typeof vi.fn>;
  } => ({
    user: null,
    isLoading: false,
    isAuthenticated: false,
    signOut: vi.fn(),
    refreshSession: vi.fn(),
  }),
}));

describe("Home", (): void => {
  beforeEach((): void => {
    mockPush.mockClear();
  });

  it("should render loading spinner", (): void => {
    const { container } = render(<Home />);
    // The home page shows a loading spinner while redirecting
    const spinner = container.querySelector(".animate-spin");
    expect(spinner).toBeInTheDocument();
  });

  it("should redirect unauthenticated users to login", (): void => {
    render(<Home />);
    expect(mockPush).toHaveBeenCalledWith("/login");
  });
});
