"use client";

import "./MailField.css";
import Document from "@tiptap/extension-document";
import Paragraph from "@tiptap/extension-paragraph";
import Text from "@tiptap/extension-text";
import Underline from "@tiptap/extension-underline";
import { useEditor, EditorContent, Extension } from "@tiptap/react";
import StarterKit from "@tiptap/starter-kit";
import MailToolbar from "./MailToolbar";
import { Grid } from "@mui/material";
import Highlight from "@tiptap/extension-highlight";
import { Color } from "@tiptap/extension-color";
import ListItem from "@tiptap/extension-list-item";
import TextStyle from "@tiptap/extension-text-style";
import TextAlign from "@tiptap/extension-text-align";
import Table from "@tiptap/extension-table";
import TableCell from "@tiptap/extension-table-cell";
import TableHeader from "@tiptap/extension-table-header";
import TableRow from "@tiptap/extension-table-row";
import Gapcursor from "@tiptap/extension-gapcursor";

interface Props {
  content?: string;
  onChange?: (richText: string) => void;
  error?: boolean;
}

const MailField: React.FC<Props> = ({ content, onChange, error }) => {
  const TAB_CHAR = "\u0009";

  const TabHandler = Extension.create({
    name: "tabHandler",
    addKeyboardShortcuts() {
      return {
        Tab: ({ editor }) => {
          // Sinks a list item / inserts a tab character
          editor
            .chain()
            .sinkListItem("listItem")
            .command(({ tr }) => {
              tr.insertText(TAB_CHAR);
              return true;
            })
            .run();
          // Prevent default behavior (losing focus)
          return true;
        },
      };
    },
  });

  const editor = useEditor(
    {
      extensions: [
        StarterKit.configure(),
        Document,
        Paragraph,
        Text,
        TextStyle,
        TextAlign.configure({
          types: ["heading", "paragraph"],
        }),
        Underline,
        Highlight.configure({ multicolor: true }),
        Color,
        ListItem,
        TabHandler,
        Gapcursor,
        Table.configure({
          resizable: true,
        }),
        TableRow,
        TableHeader,
        TableCell,
      ],
      content: content,
      onUpdate({ editor }) {
        if (onChange) {
          onChange(editor.getHTML());
        }
        console.log(editor.getHTML());
      },
    },
    [],
  );

  return (
    <Grid container rowSpacing={1}>
      {/* <Grid item xs={12}>
                {editor && <MailToolbar editor={editor} />}
            </Grid> */}
      <Grid item xs={12}>
        <EditorContent
          className={error === true ? "tiptap-error" : ""}
          label="Template"
          editor={editor}
        />
      </Grid>
    </Grid>
  );
};

export default MailField;
