import { act, render, screen } from "@testing-library/react";
import { __setNavigationState } from "../mocks/nextNavigation";
import { __setShopState } from "../mocks/shop";
import { sampleProduct } from "../fixtures";
import HomePage from "../../app/page";
import KauppaPage from "../../app/kauppa/page";
import KaytetytPage from "../../app/kaytetyt/page";
import TarjouksetPage from "../../app/tarjoukset/page";
import KassaPage from "../../app/kassa/page";
import ProductPage from "../../app/tuote/[id]/page";
import AdminPage from "../../app/admin/page";
import YhteystiedotPage from "../../app/yhteystiedot/page";

describe("App pages", () => {
  it("renders app home page", async () => {
    __setShopState({ products: [sampleProduct], reviews: [] });
    render(<HomePage />);
    expect(screen.getByText(/Varjoliitokauppaan/i)).toBeInTheDocument();

    await act(async () => {
      await Promise.resolve();
    });
  });

  it("renders shop wrapper", () => {
    render(<KauppaPage />);
    expect(screen.getAllByText(/Kaikki tuotteet/i).length).toBeGreaterThan(0);
  });

  it("renders used wrapper", () => {
    render(<KaytetytPage />);
    expect(screen.getAllByText(/Käytetyt varusteet/i).length).toBeGreaterThan(0);
  });

  it("renders offers wrapper", () => {
    render(<TarjouksetPage />);
    expect(screen.getAllByText(/Tarjoukset/i).length).toBeGreaterThan(0);
  });

  it("renders cart wrapper", () => {
    __setShopState({ cart: [] });
    render(<KassaPage />);
    expect(screen.getByText(/Ostoskori on tyhjä/i)).toBeInTheDocument();
  });

  it("renders product wrapper", () => {
    __setNavigationState({ params: { id: sampleProduct.id } });
    __setShopState({ products: [sampleProduct], cart: [] });
    render(<ProductPage />);
    expect(screen.getByText(sampleProduct.name)).toBeInTheDocument();
  });

  it("renders admin wrapper", () => {
    render(<AdminPage />);
    expect(screen.getByText(/Kirjaudu ylläpitoon/i)).toBeInTheDocument();
  });

  it("renders contact wrapper", () => {
    render(<YhteystiedotPage />);
    expect(screen.getByRole('heading', { level: 1, name: /Yhteystiedot/i })).toBeInTheDocument();
  });
});
