import type { CheckboxProps } from "$/types/InputTypes";
import { Checkbox } from "@headlessui/react";
import clsx from "clsx";
import { forwardRef } from "react";


const MattrixwvCheckbox = forwardRef<HTMLInputElement, CheckboxProps>(({
	id,
	className,
	labelClassName,
	name,
	size = "sm",
	showBox = true,
	onChange,
	checked,
	defaultChecked,
	strokeWidth = 2,
	value,
	disabled,
	ariaLabel,
	children
}, ref ) => {
	return (
		<Checkbox
			id={id}
			className={clsx(
				"group",
				"flex flex-row items-center justify-start gap-x-2",
				{
					"cursor-pointer": !disabled,
					"cursor-not-allowed": disabled
				}
			)}
			name={name}
			checked={checked}
			defaultChecked={defaultChecked}
			onChange={onChange}
			value={value}
			disabled={disabled}
			aria-label={ariaLabel}
			ref={ref}
		>
			{/* Checkbox */}
			<div
				className={clsx(
					className,
					{
						"border rounded": showBox
					},
					{
						"": size === "none",
						"size-3": size === "xs",
						"size-4": size === "sm",
						"size-5": size === "md",
						"size-6": size === "lg",
						"size-7": size === "xl"
					}
				)}
			>
				<svg
					viewBox="0 0 14 14"
					fill="none"
					aria-hidden="true"
				>
					<path
						d="M3 8L6 11L11 3.5"
						strokeWidth={strokeWidth}
						strokeLinecap="round"
						strokeLinejoin="round"
					/>
				</svg>
			</div>
			{/* Label */}
			{
				children &&
				<div
					className={labelClassName}
				>
					{children}
				</div>
			}
		</Checkbox>
	);
});

MattrixwvCheckbox.displayName = "MattrixwvCheckbox";

export default MattrixwvCheckbox;
