/**
 * Workspaces Page Tests
 * Tests for page structure and component integration
 */

import { describe, it, expect, vi } from "vitest";
import { render, screen } from "@testing-library/react";

// Mock next/link
vi.mock("next/link", () => ({
  default: ({ children, href }: { children: React.ReactNode; href: string }): React.JSX.Element => (
    <a href={href}>{children}</a>
  ),
}));

// Mock the WorkspaceCard component
vi.mock("@/components/workspace/WorkspaceCard", () => ({
  WorkspaceCard: (): React.JSX.Element => <div data-testid="workspace-card">WorkspaceCard</div>,
}));

describe("WorkspacesPage", (): void => {
  // Note: NODE_ENV is "test" during test runs, which triggers the Coming Soon view
  // This tests the production-like behavior where mock data is hidden

  it("should render the Coming Soon view in non-development environments", async (): Promise<void> => {
    const { default: WorkspacesPage } = await import("./page");
    render(<WorkspacesPage />);

    // In test mode (non-development), should show Coming Soon
    expect(screen.getByText("Coming Soon")).toBeInTheDocument();
    expect(screen.getByText("Workspace Management")).toBeInTheDocument();
  });

  it("should display appropriate description for workspace feature", async (): Promise<void> => {
    const { default: WorkspacesPage } = await import("./page");
    render(<WorkspacesPage />);

    expect(
      screen.getByText(/create and manage workspaces to organize your projects/i)
    ).toBeInTheDocument();
  });

  it("should not render mock workspace data in Coming Soon view", async (): Promise<void> => {
    const { default: WorkspacesPage } = await import("./page");
    render(<WorkspacesPage />);

    // Should not show workspace cards or create form in non-development mode
    expect(screen.queryByTestId("workspace-card")).not.toBeInTheDocument();
    expect(screen.queryByText("Create New Workspace")).not.toBeInTheDocument();
  });

  it("should include link back to settings", async (): Promise<void> => {
    const { default: WorkspacesPage } = await import("./page");
    render(<WorkspacesPage />);

    const link = screen.getByRole("link", { name: /back to settings/i });
    expect(link).toBeInTheDocument();
    expect(link).toHaveAttribute("href", "/settings");
  });
});
