import { describe, it, vi, expect, beforeEach, afterEach } from "vitest";
import { render, fireEvent, screen, cleanup } from "@testing-library/react";
import { ItemPage } from "../../../src/components/item/ItemPage.jsx"; // Assurez-vous d'importer correctement votre composant
import { AuthenticationContext } from "../../../src/contexts/index.js";

describe("Item Page with Authentication", () => {
  let rooms;
  beforeEach(() => {
    // Simuler la connexion de l'utilisateur
    const user = { username: "Juvisi!0TEST", password: "Juvisi!0TEST" };
    const loginFunction = vi.fn().mockResolvedValue(user); // Mock de la fonction de connexion
    rooms = [{ _id: "66425c9d8869396c3e853633", name: "test" }];
    render(
      <AuthenticationContext.Provider value={{ login: loginFunction }}>
        <ItemPage />
      </AuthenticationContext.Provider>,
    );
  });

  afterEach(cleanup); // Nettoyer après chaque test pour éviter les fuites de mémoire

  it("renders without errors", () => {
    expect(screen.getByTestId("item-container")).toBeTruthy();
  });

  /*it('allows filtering items', async () => {
        // Simuler une saisie dans le champ de recherche par nom
        fireEvent.change(screen.getByLabelText('Search by name:'), { target: { value: 'Item' } });
        // Attendre que les éléments filtrés soient rendus dans la liste
        await screen.findByText('Filtered Item');
    });*/

  /*it('allows creating an item', async () => {
      // Simuler un clic sur le bouton "Create Item"
      fireEvent.click(screen.getByTestId('create-item-button'));
      // Attendre que le modal de création d'élément s'ouvre
      await screen.findByTestId('create-item-button');
      // Simuler une saisie dans les champs du formulaire de création d'élément
      fireEvent.change(screen.getByTestId("create-item-Brand-Input"), { target: { value: 'Brand X' } });
      fireEvent.change(screen.getByTestId("create-item-Model-Input"), { target: { value: 'Model Y' } });
      // Simuler un clic pour ouvrir le menu déroulant
fireEvent.mouseDown(screen.getByTestId("create-item-Room-Select"));

// Attendre que les options du menu déroulant soient rendues
await screen.findByText('test');

// Simuler un clic pour choisir l'option "test"
fireEvent.click(screen.getByText('test'));


      // Simuler un clic sur le bouton "Submit" du formulaire
      fireEvent.click(screen.getByText('Submit'));
      // Attendre que l'élément soit ajouté à la liste
      await screen.findByText('Brand X');
      await screen.findByText('Model Y');
  });*/

  /*it('allows updating an item', async () => {
        // Simuler un clic sur le bouton "Edit" de l'élément à mettre à jour
        fireEvent.click(screen.getByText('Edit'));
        // Attendre que le modal de mise à jour de l'élément s'ouvre
        await screen.findByText('Update Item');
        // Simuler une saisie dans les champs du formulaire de mise à jour d'élément
        fireEvent.change(screen.getByLabelText('Brand'), { target: { value: 'Updated Brand' } });
        fireEvent.change(screen.getByLabelText('Model'), { target: { value: 'Updated Model' } });
        // Simuler un clic sur le bouton "Submit" du formulaire de mise à jour
        fireEvent.click(screen.getByText('Submit'));
        // Attendre que l'élément mis à jour soit affiché dans la liste
        await screen.findByText('Updated Brand Updated Model');
    });*/

  /*it('allows deleting an item', async () => {
        // Simuler un clic sur le bouton "Delete" de l'élément à supprimer
        fireEvent.click(screen.getByText('Delete'));
        // Attendre que l'élément soit supprimé de la liste
        await screen.findByText('Updated Brand Updated Model', { timeout: 5000, shouldNotExist: true });
    });*/
});
