// react
import React, { useState } from "react";

// icons
import { ChevronDown, PlayIcon } from "lucide-react";

// hooks
import useEstimateOption from "hooks/use-estimate-option";

// components
import { WebViewModal } from "./web-view-modal";

type Props = {
  value: any;
  onChange: (value: any) => void;
  disabled?: boolean;
};

export const EstimateSelect: React.FC<Props> = (props) => {
  const { value, onChange, disabled = false } = props;

  const [isOpen, setIsOpen] = useState(false);

  const { estimatePoints } = useEstimateOption();

  return (
    <>
      <WebViewModal
        isOpen={isOpen}
        modalTitle="Select estimate"
        onClose={() => {
          setIsOpen(false);
        }}
      >
        <WebViewModal.Options
          options={[
            {
              label: "None",
              value: null,
              checked: value === null,
              onClick: () => {
                setIsOpen(false);
                if (disabled) return;
                onChange(null);
              },
              icon: <PlayIcon className="h-4 w-4 -rotate-90" />,
            },
            ...estimatePoints?.map((point) => ({
              label: point.value,
              value: point.key,
              checked: point.key === value,
              icon: <PlayIcon className="h-4 w-4 -rotate-90" />,
              onClick: () => {
                setIsOpen(false);
                if (disabled) return;
                onChange(point.key);
              },
            })),
          ]}
        />
      </WebViewModal>

      <button
        type="button"
        disabled={disabled}
        onClick={() => setIsOpen(true)}
        className={
          "relative w-full px-2.5 py-0.5 text-base flex justify-between items-center gap-0.5 text-custom-text-100"
        }
      >
        {value ? (
          <div className="flex items-center gap-x-1.5">
            <PlayIcon className="h-4 w-4 -rotate-90" />
            <span>{estimatePoints?.find((e) => e.key === value)?.value}</span>
          </div>
        ) : (
          "No estimate"
        )}
        <ChevronDown className="w-5 h-5" />
      </button>
    </>
  );
};
