import { renderHook } from "@testing-library/react-hooks";
import { useDelayedPlayerDetails } from "../useDelayedPlayerDetails";
import { useIsTablet } from "@applicaster/zapp-react-native-utils/reactHooks";

jest.useFakeTimers();

jest.mock("@applicaster/zapp-react-native-utils/reactHooks", () => ({
  useIsTablet: jest.fn().mockReturnValue(false),
}));

describe("useDelayedPlayerDetails", () => {
  beforeEach(() => {
    jest.clearAllMocks();
  });

  it("should return false initially, that changes after 1 second", () => {
    const { result } = renderHook(() =>
      useDelayedPlayerDetails({ isInline: true, isDocked: false, isPip: false })
    );

    expect(result.current).toBe(false);

    jest.advanceTimersByTime(1000);

    expect(result.current).toBe(true);
  });

  it("should return false when isPip is true", () => {
    const { result } = renderHook(() =>
      useDelayedPlayerDetails({ isInline: true, isDocked: true, isPip: true })
    );

    expect(result.current).toBe(false);
  });

  it("should return false when isDocked is true", () => {
    const { result } = renderHook(() =>
      useDelayedPlayerDetails({ isInline: true, isDocked: true, isPip: false })
    );

    expect(result.current).toBe(false);
  });

  it("should return true for tablet regardless of other flags", () => {
    (useIsTablet as jest.Mock).mockReturnValue(true);

    const { result } = renderHook(() =>
      useDelayedPlayerDetails({
        isInline: false,
        isDocked: false,
        isPip: false,
      })
    );

    jest.advanceTimersByTime(1000);

    expect(result.current).toBe(true);
  });
});
