import { Controller, FieldValues } from "react-hook-form";
import { FormFieldBaseProps } from "./utility";
import { Input, TextArea } from "tamagui";
import { ComponentPropsWithoutRef } from "react";
import { ErrorMessage } from "./form";

type InputFieldProps<T extends FieldValues> = FormFieldBaseProps<T> &
  ComponentPropsWithoutRef<typeof Input>;

export const InputField = <T extends FieldValues>({
  form,
  name,
  ...props
}: InputFieldProps<T>) => (
  <Controller
    control={form.control}
    name={name}
    render={({ field, fieldState }) => (
      <>
        <Input {...field} {...props} />
        <ErrorMessage error={fieldState.error} />
      </>
    )}
  />
);

type TextAreaFieldProps<T extends FieldValues> = FormFieldBaseProps<T> &
  ComponentPropsWithoutRef<typeof TextArea>;

export const TextAreaField = <T extends FieldValues>({
  form,
  name,
  ...props
}: TextAreaFieldProps<T>) => (
  <Controller
    control={form.control}
    name={name}
    render={({ field, fieldState }) => (
      <>
        <TextArea {...field} {...props} />
        <ErrorMessage error={fieldState.error} />
      </>
    )}
  />
);

export default Input;