"use client"

import { Checkbox as AriaCheckbox } from "react-aria-components"
import { useController, useFormContext } from "react-hook-form"

import { InfoCircleIcon } from "@/components/Icons"
import CheckIcon from "@/components/Icons/Check"
import Caption from "@/components/TempDesignSystem/Text/Caption"

import styles from "./checkbox.module.css"

import { CheckboxProps } from "@/types/components/checkbox"

export default function Checkbox({
  name,
  children,
  registerOptions,
}: React.PropsWithChildren<CheckboxProps>) {
  const { control } = useFormContext()
  const { field, fieldState } = useController({
    control,
    name,
    rules: registerOptions,
  })

  return (
    <AriaCheckbox
      className={styles.container}
      isSelected={field.value}
      onChange={field.onChange}
      data-testid={name}
      isDisabled={registerOptions?.disabled}
    >
      {({ isSelected }) => (
        <>
          <span className={styles.checkboxContainer}>
            <span className={styles.checkbox}>
              {isSelected && <CheckIcon color="white" />}
            </span>
            {children}
          </span>
          {fieldState.error ? (
            <Caption className={styles.error} fontOnly>
              <InfoCircleIcon color="red" />
              {fieldState.error.message}
            </Caption>
          ) : null}
        </>
      )}
    </AriaCheckbox>
  )
}
