'use client';
import { Field, Description, Button, Input } from "@headlessui/react";
import { PaperAirplaneIcon } from "@heroicons/react/24/solid";
import { useState } from "react";

export enum FieldType {
  number = 'number',
  text = 'text',
  radio = 'radio',
  checkbox = 'checkbox'
}

export type FormFields = {
  type: FieldType,
  name: string,
  label?: string,
  required?: boolean,
  default?: string,
  autocomplete?: boolean,
  placeholder?: string
}

const Form = ({ fields, onSubmit }: { fields: FormFields[], onSubmit: (FormData) => any }) => {
  const [formData, setFormData] = useState({});
  
  const formSubmit = (e) => {
    e.preventDefault();

    setFormData( new FormData( e.target ) );

    onSubmit( formData );
  }

  return (
  <div>
    <form className="mt-10 align-center items-center justify-center gap-x-6" onSubmit={formSubmit}>
        {fields.map( (f) => {
          return (
            <Field>
              {f.label && <Description className="text-sm/6 text-white/50"> {f.label} </Description>}
              <Input 
                  name={f.name}
                  required={f.required ? true : false}
                  type={f.type}
                  defaultValue={f.default ? f.default : ''}
                  autoComplete={f.autocomplete ? "on" : "off"}
                  placeholder={f.placeholder ? f.placeholder : ''}
                  className=
                  'mt-3 block w-full rounded-lg border-none bg-white/5 py-1.5 px-3 text-sm/6 text-white focus:outline-none data-[focus]:outline-2 data-[focus]:-outline-offset-2 data-[focus]:outline-white/25'
                  />
            </Field>
          );
        })}
        <Button 
          className="mt-9 inline-flex items-center gap-2 rounded-md bg-white py-1.5 px-5 text-sm/6 font-semibold text-black shadow-inner shadow-white/10 focus:outline-none data-[hover]:bg-gray-200 data-[open]:bg-gray-200 data-[focus]:outline-1 data-[focus]:outline-white"
          type='submit'
        >
          Send
          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" className="size-4">
            <path d="M3.478 2.404a.75.75 0 0 0-.926.941l2.432 7.905H13.5a.75.75 0 0 1 0 1.5H4.984l-2.432 7.905a.75.75 0 0 0 .926.94 60.519 60.519 0 0 0 18.445-8.986.75.75 0 0 0 0-1.218A60.517 60.517 0 0 0 3.478 2.404Z" />
          </svg>
        </Button>
      </form>
    </div>
  );
}

export default Form;

