// @vitest-environment jsdom

import { act, renderHook } from "@testing-library/react";
import { describe, expect, it } from "vitest";
import {
  emptyClubForm,
  emptyMachineForm,
  emptyVenueForm,
} from "@/components/network-admin-client-config";
import { useNetworkAdminClientForms } from "@/components/use-network-admin-client-forms";

describe("useNetworkAdminClientForms", () => {
  it("starts from shared empty form defaults", () => {
    const { result } = renderHook(() => useNetworkAdminClientForms());

    expect(result.current.clubForm).toBe(emptyClubForm);
    expect(result.current.venueForms).toEqual({});
    expect(result.current.machineForms).toEqual({});
  });

  it("updates club, venue, and machine form state independently", () => {
    const { result } = renderHook(() => useNetworkAdminClientForms());

    act(() => {
      result.current.setClubForm({ atcSportclubId: "106" });
      result.current.setVenueForms({ club_2: { name: "Venue Two", slug: "venue-two", status: "inactive" } });
      result.current.setMachineForms({ venue_2: { label: "Machine Two", active: false } });
    });

    expect(result.current.clubForm).toEqual({ atcSportclubId: "106" });
    expect(result.current.venueForms).toEqual({
      club_2: { name: "Venue Two", slug: "venue-two", status: "inactive" },
    });
    expect(result.current.machineForms).toEqual({
      venue_2: { label: "Machine Two", active: false },
    });
    expect(result.current.clubForm).not.toBe(emptyClubForm);
    expect(result.current.venueForms.club_2).not.toBe(emptyVenueForm);
    expect(result.current.machineForms.venue_2).not.toBe(emptyMachineForm);
  });
});
