import { ReactNodeViewRenderer } from "@tiptap/react"
import { mergeAttributes } from "@tiptap/core"
import { TaskItemView } from "./components/task-item-view"
import { TaskItem as TiptapTaskItem } from "@tiptap/extension-task-item"

export const TaskItem = TiptapTaskItem.extend({
	name: "taskItem",

	draggable: true,

	addOptions() {
		return {
			...this.parent?.(),
			nested: true
		}
	},

	addAttributes() {
		return {
			checked: {
				default: false,
				keepOnSplit: false,
				parseHTML: element => {
					const dataChecked = element.getAttribute("data-checked")
					return dataChecked === "" || dataChecked === "true"
				},
				renderHTML: attributes => ({
					"data-checked": attributes.checked
				})
			}
		}
	},

	renderHTML({ node, HTMLAttributes }) {
		return [
			"li",
			mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {
				"data-type": this.name
			}),
			[
				"div",
				{ class: "taskItem-checkbox-container" },
				[
					"label",
					[
						"input",
						{
							type: "checkbox",
							checked: node.attrs.checked ? "checked" : null,
							class: "taskItem-checkbox"
						}
					]
				]
			],
			["div", { class: "taskItem-content" }, 0]
		]
	},

	addNodeView() {
		return ReactNodeViewRenderer(TaskItemView, {
			as: "span"
		})
	}
})
