import React, { FC, useState } from "react";
import { observer } from "mobx-react-lite";
// lib
import { useMobxStore } from "lib/mobx/store-provider";
import { IIssue } from "types";
import useUserAuth from "hooks/use-user-auth";
// icons
import {
  ClipboardDocumentCheckIcon,
  LinkIcon,
  PencilIcon,
  TrashIcon,
  XMarkIcon,
  ArrowTopRightOnSquareIcon,
  PaperClipIcon,
} from "@heroicons/react/24/outline";
// components
import { CustomMenu, ContextMenu } from "components/ui";
import { Tooltip } from "@plane/ui";
import { LayerDiagonalIcon } from "components/icons";
import {
  ViewAssigneeSelect,
  ViewDueDateSelect,
  ViewEstimateSelect,
  ViewIssueLabel,
  ViewPrioritySelect,
  ViewStartDateSelect,
  ViewStateSelect,
} from "components/issues";
import { IssuePrioritySelect } from "../properties";

export interface IIssueListItem {
  issue: IIssue;
  groupId: string;
}

export const IssueListItem: FC<IIssueListItem> = observer((props) => {
  const { issue, groupId } = props;
  // store
  const { user: userStore, issueFilters: issueFilterStore, issueDetail: issueDetailStore } = useMobxStore();
  const displayProperties = issueFilterStore.userFilters?.display_properties;
  const workspaceId = issueFilterStore.workspaceId;
  const projectId = issueFilterStore.projectId;
  const issueId = issue.id;
  const user = userStore.currentUser;
  console.log("userStore", userStore);
  // context menu
  const [contextMenu, setContextMenu] = useState(false);
  const [contextMenuPosition, setContextMenuPosition] = useState<React.MouseEvent | null>(null);

  const isNotAllowed = false;
  // const isNotAllowed =
  //   userAuth?.isGuest || userAuth?.isViewer || disableUserActions || isArchivedIssues;

  const partialUpdateIssue = (data: any) => {
    // console.log("data", data);
    if (workspaceId && projectId && issueId) issueDetailStore.updateIssueAsync(workspaceId, projectId, issueId, data);
  };

  return (
    <div>
      <>
        <ContextMenu
          clickEvent={contextMenuPosition}
          title="Quick actions"
          isOpen={contextMenu}
          setIsOpen={setContextMenu}
        >
          {/* {!isNotAllowed && (
            <>
              <ContextMenu.Item Icon={PencilIcon} onClick={editIssue}>
                Edit issue
              </ContextMenu.Item>
              <ContextMenu.Item Icon={ClipboardDocumentCheckIcon} onClick={makeIssueCopy}>
                Make a copy...
              </ContextMenu.Item>
              <ContextMenu.Item Icon={TrashIcon} onClick={() => handleDeleteIssue(issue)}>
                Delete issue
              </ContextMenu.Item>
            </>
          )}
          <ContextMenu.Item Icon={LinkIcon} onClick={handleCopyText}>
            Copy issue link
          </ContextMenu.Item>
          <a href={issuePath} target="_blank" rel="noreferrer noopener">
            <ContextMenu.Item Icon={ArrowTopRightOnSquareIcon}>
              Open issue in new tab
            </ContextMenu.Item>
          </a> */}
        </ContextMenu>
        <div
          className="flex items-center justify-between px-4 py-2.5 gap-10 border-b border-custom-border-200 bg-custom-background-100 last:border-b-0"
          onContextMenu={(e) => {
            e.preventDefault();
            setContextMenu(true);
            setContextMenuPosition(e);
          }}
        >
          <div className="flex-grow cursor-pointer min-w-[200px] whitespace-nowrap overflow-hidden overflow-ellipsis">
            <div className="group relative flex items-center gap-2">
              {/* {properties.key && (
                <Tooltip
                  tooltipHeading="Issue ID"
                  tooltipContent={`${issue.project_detail?.identifier}-${issue.sequence_id}`}
                >
                  <span className="flex-shrink-0 text-xs text-custom-text-200">
                    {issue.project_detail?.identifier}-{issue.sequence_id}
                  </span>
                </Tooltip>
              )} */}
              <Tooltip position="top-left" tooltipHeading="Title" tooltipContent={issue.name}>
                <button
                  type="button"
                  className="truncate text-[0.825rem] text-custom-text-100"
                  onClick={() => {
                    // if (!isDraftIssues) openPeekOverview(issue);
                    // if (handleDraftIssueSelect) handleDraftIssueSelect(issue);
                  }}
                >
                  {issue.name}
                </button>
              </Tooltip>
            </div>
          </div>

          <div className={`flex flex-shrink-0 items-center gap-2 text-xs `}>
            {displayProperties?.priority && (
              // <ViewPrioritySelect
              //   issue={issue}
              //   partialUpdateIssue={partialUpdateIssue}
              //   position="right"
              //   user={user as any}
              //   isNotAllowed={isNotAllowed}
              // />
              <IssuePrioritySelect issue={issue} groupId={groupId} />
            )}
            {displayProperties?.state && (
              <ViewStateSelect
                issue={issue}
                partialUpdateIssue={partialUpdateIssue}
                position="right"
                user={user as any}
                isNotAllowed={isNotAllowed}
              />
            )}
            {displayProperties?.start_date && issue.start_date && (
              <ViewStartDateSelect
                issue={issue}
                partialUpdateIssue={partialUpdateIssue}
                user={user as any}
                isNotAllowed={isNotAllowed}
              />
            )}
            {displayProperties?.due_date && issue.target_date && (
              <ViewDueDateSelect
                issue={issue}
                partialUpdateIssue={partialUpdateIssue}
                user={user as any}
                isNotAllowed={isNotAllowed}
              />
            )}
            {displayProperties?.labels && <ViewIssueLabel labelDetails={issue.label_details} maxRender={3} />}
            {displayProperties?.assignee && (
              <ViewAssigneeSelect
                issue={issue}
                partialUpdateIssue={partialUpdateIssue}
                position="right"
                user={user as any}
                isNotAllowed={isNotAllowed}
              />
            )}
            {displayProperties?.estimate && issue.estimate_point !== null && (
              <ViewEstimateSelect
                issue={issue}
                partialUpdateIssue={partialUpdateIssue}
                position="right"
                user={user as any}
                isNotAllowed={isNotAllowed}
              />
            )}
            {displayProperties?.sub_issue_count && issue.sub_issues_count > 0 && (
              <div className="flex cursor-default items-center rounded-md border border-custom-border-200 px-2.5 py-1 text-xs shadow-sm">
                <Tooltip tooltipHeading="Sub-issue" tooltipContent={`${issue.sub_issues_count}`}>
                  <div className="flex items-center gap-1 text-custom-text-200">
                    <LayerDiagonalIcon className="h-3.5 w-3.5" />
                    {issue.sub_issues_count}
                  </div>
                </Tooltip>
              </div>
            )}
            {displayProperties?.link && issue.link_count > 0 && (
              <div className="flex cursor-default items-center rounded-md border border-custom-border-200 px-2.5 py-1 text-xs shadow-sm">
                <Tooltip tooltipHeading="Links" tooltipContent={`${issue.link_count}`}>
                  <div className="flex items-center gap-1 text-custom-text-200">
                    <LinkIcon className="h-3.5 w-3.5" />
                    {issue.link_count}
                  </div>
                </Tooltip>
              </div>
            )}
            {displayProperties?.attachment_count && issue.attachment_count > 0 && (
              <div className="flex cursor-default items-center rounded-md border border-custom-border-200 px-2.5 py-1 text-xs shadow-sm">
                <Tooltip tooltipHeading="Attachments" tooltipContent={`${issue.attachment_count}`}>
                  <div className="flex items-center gap-1 text-custom-text-200">
                    <PaperClipIcon className="h-3.5 w-3.5 -rotate-45" />
                    {issue.attachment_count}
                  </div>
                </Tooltip>
              </div>
            )}
            {/* {type && !isNotAllowed && (
              <CustomMenu width="auto" ellipsis>
                <CustomMenu.MenuItem onClick={editIssue}>
                  <div className="flex items-center justify-start gap-2">
                    <PencilIcon className="h-4 w-4" />
                    <span>Edit issue</span>
                  </div>
                </CustomMenu.MenuItem>
                {type !== "issue" && removeIssue && (
                  <CustomMenu.MenuItem onClick={removeIssue}>
                    <div className="flex items-center justify-start gap-2">
                      <XMarkIcon className="h-4 w-4" />
                      <span>Remove from {type}</span>
                    </div>
                  </CustomMenu.MenuItem>
                )}
                <CustomMenu.MenuItem onClick={() => handleDeleteIssue(issue)}>
                  <div className="flex items-center justify-start gap-2">
                    <TrashIcon className="h-4 w-4" />
                    <span>Delete issue</span>
                  </div>
                </CustomMenu.MenuItem>
                <CustomMenu.MenuItem onClick={handleCopyText}>
                  <div className="flex items-center justify-start gap-2">
                    <LinkIcon className="h-4 w-4" />
                    <span>Copy issue link</span>
                  </div>
                </CustomMenu.MenuItem>
              </CustomMenu>
            )} */}
          </div>
        </div>
      </>
    </div>
  );
});