import React from "react";
import { render, screen, fireEvent } from "@testing-library/react";
import "@testing-library/jest-dom";
import Button from "../Button";

describe("Button Component", () => {
  it("renders without crashing", () => {
    render(<Button />);
    expect(screen.getByRole("button")).toBeInTheDocument();
  });

  it("renders with all props", () => {
    render(
      <Button
        dataTestId="testid"
        disabled={false}
        fillMode="solid"
        icon="test-icon"
        iconClass="test-icon-class"
        imageAlt="test-image-alt"
        imageUrl="test-image-url"
        rounded="medium"
        selected={false}
        size="medium"
        themeColor="primary"
        togglable={false}
        className="test-class"
        onClick={() => {}}
        onMouseDown={() => {}}
        onMouseUp={() => {}}
        onFocus={() => {}}
        onBlur={() => {}}
      >
        Test Button
      </Button>
    );
  });

  it("calls onClick when clicked", () => {
    const onClickMock = jest.fn();
    render(<Button onClick={onClickMock}>Clickable</Button>);
    fireEvent.click(screen.getByText("Clickable"));
    expect(onClickMock).toHaveBeenCalledTimes(1);
  });

  it("matches snapshot", () => {
    const { asFragment } = render(<Button>Snapshot Test</Button>);
    expect(asFragment()).toMatchSnapshot();
  });
});
