import { useConfirm } from "@/components/confirm/hooks/useConfirm";
import { Button } from "@/components/ui/button";
import { useApp } from "@/context/app";
import { useGlobal } from "@/context/global";
import { ProjectFilesTree } from "@/models/projectFilesTree";
import {
  faEdit,
  faFileCode,
  faFolderOpen,
  faTrashCan,
} from "@fortawesome/free-regular-svg-icons";
import { Separator } from "@radix-ui/react-select";
import { SelectedProjectRenameItemForm } from "../form";

type ContextMenuProps = {
  handleViewItemClick: (item: ProjectFilesTree) => void;
  handleRenameItemClick: (item: ProjectFilesTree) => void;
  handleDeleteItemClick: (item: ProjectFilesTree) => void;
  item: ProjectFilesTree;
};
export default function ContextMenu({
  handleViewItemClick,
  handleRenameItemClick,
  handleDeleteItemClick,
  item,
}: ContextMenuProps) {
  const { activeSession, sendSignal } = useApp();
  const { permissions } = activeSession;

  const { dict, openModal } = useGlobal();
  const { confirm } = useConfirm();

  return (
    <>
      <Button
        variant="plain"
        color="neutral"
        size="sm"
        decorator={item.type ? faFileCode : faFolderOpen}
        className="w-full justify-start"
        pClassName="w-full"
        onClick={() => handleViewItemClick(item)}
      >
        {item.type ? dict.pages.general.view : dict.pages.general.open}
      </Button>
      {permissions && permissions.canEditFile() && (
        <>
          <Button
            variant="plain"
            color="neutral"
            size="sm"
            decorator={faEdit}
            className="w-full justify-start"
            pClassName="w-full"
            onClick={() =>
              openModal({
                id: "rename-project-file",
                content: (
                  <SelectedProjectRenameItemForm
                    {...{ item, sendSignal, handleRenameItemClick }}
                  />
                ),
              })
            }
          >
            {dict.pages.general.rename}
          </Button>
          <Separator />
          <Button
            variant="plain"
            color="danger"
            size="sm"
            decorator={faTrashCan}
            className="w-full justify-start"
            pClassName="w-full"
            onClick={async () => {
              const isConfirmed = await confirm();
              if (!isConfirmed) return;

              handleDeleteItemClick(item);
            }}
          >
            {dict.pages.general.delete}
          </Button>
        </>
      )}
    </>
  );
}
