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


export default function MattrixwvCheckbox({
	id = crypto.randomUUID().replaceAll("-", ""),
	className,
	labelClassName,
	name,
	size = "sm",
	showBox = true,
	onChange,
	checked,
	defaultChecked,
	strokeWidth = 2,
	value,
	disabled,
	children
}: Readonly<CheckboxProps>){
	return (
		<Checkbox
			id={id}
			className={clsx(
				"group",
				"flex flex-row items-center justify-start gap-x-2",
				"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",
				{
					"cursor-pointer": !disabled,
					"cursor-not-allowed": disabled
				}
			)}
			name={name}
			checked={checked}
			defaultChecked={defaultChecked}
			onChange={onChange}
			value={value}
			disabled={disabled}
			aria-labelledby={`${id}Label`}
		>
			{/* 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 &&
				<span
					id={`${id}Label`}
					className={labelClassName}
				>
					{children}
				</span>
			}
		</Checkbox>
	);
}
