import { useField } from 'vee-validate'
import { computed, ref, toRef } from 'vue'
import type { ComponentInternalInstance } from 'vue'

interface Props {
  id: string
  value: string | number
  label?: string
  disabled?: boolean
  modelValue?: string | number
  required?: boolean
}

export default (props: Props, slots: ComponentInternalInstance['slots']) => {
  const { checked, handleChange } = useField(
    toRef(props, 'id'),
    computed(() => ({
      required: props.required,
    })),
    {
      type: 'radio',
      initialValue: props.modelValue,
      checkedValue: props.value,
      syncVModel: true,
    },
  )

  const focused = ref(false)

  const active = computed(() => !props.disabled)
  const hasLabel = computed(() => !!props.label || slots.default)

  return {
    focused,
    active,
    checked,
    hasLabel,
    handleChange,
  }
}
