import { last } from "lodash-es";
import { useEffect } from "react";
import { NodeType, OrderedListNode, TaskListNode, UnorderedListNode } from "@/types/node";
import { EditorRefActions } from "../Editor";

const useAutoComplete = (actions: EditorRefActions) => {
  useEffect(() => {
    const editor = actions.getEditor();
    if (!editor) return;

    editor.addEventListener("keydown", (event) => {
      if (event.key === "Enter") {
        if (event.isComposing) {
          return;
        }
        const cursorPosition = actions.getCursorPosition();
        const prevContent = actions.getContent().substring(0, cursorPosition);
        const lastNode = last(window.parse(prevContent));
        if (!lastNode) {
          return;
        }

        let insertText = "";
        if (lastNode.type === NodeType.TASK_LIST) {
          const { complete } = lastNode.value as TaskListNode;
          insertText = complete ? "- [x] " : "- [ ] ";
        } else if (lastNode.type === NodeType.UNORDERED_LIST) {
          const { symbol } = lastNode.value as UnorderedListNode;
          insertText = `${symbol} `;
        } else if (lastNode.type === NodeType.ORDERED_LIST) {
          const { number } = lastNode.value as OrderedListNode;
          insertText = `${Number(number) + 1}. `;
        }
        if (insertText) {
          actions.insertText(`\n${insertText}`);
          event.preventDefault();
        }
      }
    });
  }, []);
};

export default useAutoComplete;
