'use client';

import { Button, Dialog, DialogBackdrop, DialogPanel, DialogTitle } from '@headlessui/react';
import clsx from 'clsx';
import CheckboxField from 'components/form/checkbox-field';
import FileInput from 'components/form/file-input';
import Input from 'components/form/input-field';
import LoadingDots from 'components/loading-dots';
import { Order } from 'lib/shopify/types';
import { FormEventHandler, useRef, useTransition } from 'react';
import { activateWarranty } from './actions';

type ActivateWarrantyModalProps = {
  isOpen: boolean;
  onClose: () => void;
  order: Order;
};

function ActivateWarrantyModal({ onClose, isOpen, order }: ActivateWarrantyModalProps) {
  const [pending, startTransition] = useTransition();
  const formRef = useRef<HTMLFormElement>(null);

  const handleSubmit: FormEventHandler<HTMLFormElement> = (event) => {
    event.preventDefault();
    const form = formRef.current;
    if (!form) return;
    const formData = new FormData(form);

    startTransition(async () => {
      await activateWarranty(order, formData);
      form.reset();
      onClose();
    });
  };

  return (
    <Dialog
      open={isOpen}
      onClose={onClose}
      transition
      className="fixed inset-0 z-50 flex w-screen items-center justify-center bg-black/30 p-4 transition duration-300 ease-out data-[closed]:opacity-0"
    >
      {/* The backdrop, rendered as a fixed sibling to the panel container */}
      <DialogBackdrop className="fixed inset-0 bg-black/30" />

      {/* Full-screen container to center the panel */}
      <div className="fixed inset-0 flex w-screen items-center justify-center p-4">
        {/* The actual dialog panel  */}
        <DialogPanel className="w-full max-w-lg bg-white p-5 sm:w-[500px]">
          <DialogTitle className="mb-2 font-bold">Activate Warranty</DialogTitle>
          <form onSubmit={handleSubmit} ref={formRef}>
            <div className="flex w-full flex-col gap-4">
              <FileInput
                label="Odometer"
                name="warranty_activation_odometer"
                fileId={order?.warrantyActivationOdometer?.value}
              />
              <FileInput
                label="Installation Receipt"
                name="warranty_activation_installation"
                fileId={order?.warrantyActivationInstallation?.value}
              />
              <CheckboxField
                label="Self Installed"
                name="warranty_activation_self_install"
                defaultChecked={order?.warrantyActivationSelfInstall?.value === 'true'}
              />
              <Input
                label="Customer Mileage"
                name="warranty_activation_mileage"
                type="number"
                defaultValue={order?.warrantyActivationMileage?.value}
              />
              <Input
                label="Customer VIN"
                name="warranty_activation_vin"
                defaultValue={order?.warrantyActivationVIN?.value}
              />
            </div>
            <div className="mt-4 flex w-full justify-end gap-4">
              <button
                type="button"
                className="text-sm font-semibold leading-6 text-gray-900"
                onClick={onClose}
              >
                Cancel
              </button>
              <Button
                type="submit"
                className={clsx(
                  'flex items-center gap-2 rounded-md bg-primary px-3 py-2 text-sm font-semibold text-white shadow-sm focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600',
                  { 'cursor-not-allowed opacity-60': pending },
                  { 'cursor-pointer opacity-100': !pending }
                )}
                disabled={pending}
              >
                {pending && <LoadingDots className="bg-white" />}
                Submit
              </Button>
            </div>
          </form>
        </DialogPanel>
      </div>
    </Dialog>
  );
}

export default ActivateWarrantyModal;