import { Fragment } from "react";

// headless ui
import { Popover, Transition } from "@headlessui/react";

// helper
import { renderEmoji } from "helpers/emoji.helper";

// icons
import { Icon } from "components/ui";

const reactionEmojis = ["128077", "128078", "128516", "128165", "128533", "129505", "9992", "128064"];

interface Props {
  onSelect: (emoji: string) => void;
  position?: "top" | "bottom";
  selected?: string[];
  size?: "sm" | "md" | "lg";
}

export const ReactionSelector: React.FC<Props> = (props) => {
  const { onSelect, position, selected = [], size } = props;

  return (
    <Popover className="relative">
      {({ open, close: closePopover }) => (
        <>
          <Popover.Button
            className={`${
              open ? "" : "text-opacity-90"
            } group inline-flex items-center rounded-md bg-neutral-component-surface-dark focus:outline-none`}
          >
            <span
              className={`flex items-center justify-center rounded-md px-2 ${
                size === "sm" ? "h-6 w-6" : size === "md" ? "h-7 w-7" : "h-8 w-8"
              }`}
            >
              <Icon iconName="add_reaction" className="scale-125 text-neutral-text-strong" />
            </span>
          </Popover.Button>
          <Transition
            as={Fragment}
            enter="transition ease-out duration-200"
            enterFrom="opacity-0 translate-y-1"
            enterTo="opacity-100 translate-y-0"
            leave="transition ease-in duration-150"
            leaveFrom="opacity-100 translate-y-0"
            leaveTo="opacity-0 translate-y-1"
          >
            <Popover.Panel
              className={`absolute -left-2 z-10 bg-sidebar-neutral-component-surface-light ${
                position === "top" ? "-top-12" : "-bottom-12"
              }`}
            >
              <div className="rounded-md border border-neutral-border-medium bg-sidebar-neutral-component-surface-light p-1 shadow-custom-shadow-sm">
                <div className="flex gap-x-1">
                  {reactionEmojis.map((emoji) => (
                    <button
                      key={emoji}
                      type="button"
                      onClick={() => {
                        onSelect(emoji);
                        closePopover();
                      }}
                      className={`grid select-none place-items-center rounded-md p-1 text-sm ${
                        selected.includes(emoji)
                          ? "bg-primary-solid/10"
                          : "hover:bg-sidebar-neutral-component-surface-dark"
                      }`}
                    >
                      {renderEmoji(emoji)}
                    </button>
                  ))}
                </div>
              </div>
            </Popover.Panel>
          </Transition>
        </>
      )}
    </Popover>
  );
};
