"use client";
import React, { useEffect } from "react";
import { useEditor, EditorContent } from "@tiptap/react";
import StarterKit from "@tiptap/starter-kit";
import Link from "@tiptap/extension-link";
import Image from "@tiptap/extension-image";
import Placeholder from "@tiptap/extension-placeholder";
import { Plugin } from "prosemirror-state"; // ✅ import Plugin from prosemirror-state
import { Button, Stack } from "react-bootstrap";

// Extension to clean pasted <pre><code> blocks
const CleanPaste = StarterKit.configure({
  codeBlock: false, // turn off built-in code block
  link: false, // 👈 remove default Link
}).extend({
  addProseMirrorPlugins() {
    return [
      new Plugin({
        props: {
          transformPastedHTML(html: string) {
            // Remove <pre><code> blocks
            return html.replace(
              /<pre[^>]*><code[^>]*>[\s\S]*?<\/code><\/pre>/gi,
              ""
            );
          },
        },
      }),
    ];
  },
});

type HtmlEditorProps = {
  value: string;
  onChange: (html: string) => void;
};

export default function HtmlEditor({ value, onChange }: HtmlEditorProps) {
  const editor = useEditor({
    extensions: [
      CleanPaste,
      Link.configure({ openOnClick: false }),
      Image,
      Placeholder.configure({
        placeholder: "Write your content here...",
      }),
    ],
    content: value || "",
    immediatelyRender: false,
    onUpdate: ({ editor }) => {
      onChange(editor.getHTML());
    },
  });

  // Force default paragraph when empty
  useEffect(() => {
    if (editor && !editor.isActive("paragraph")) {
      editor.chain().focus().setParagraph().run();
    }
  }, [editor]);

  // Sync external changes
  useEffect(() => {
    if (editor && value !== editor.getHTML()) {
      editor.commands.setContent(value || "");
    }
  }, [value, editor]);

  if (!editor) return null;

  return (
    <div className="border rounded-4 p-2 bg-white">
      {/* Sticky toolbar */}
      <Stack
        direction="horizontal"
        gap={2}
        className="bg-light p-2 sticky-top"
        style={{ top: 0, zIndex: 10 }}
      >
        <Button
          type="button"
          variant={editor.isActive("bold") ? "danger" : "outline-danger"}
          onClick={() => editor.chain().focus().toggleBold().run()}
        >
          <i className="bi bi-type-bold"></i>
        </Button>

        <Button
          type="button"
          variant={editor.isActive("italic") ? "danger" : "outline-danger"}
          onClick={() => editor.chain().focus().toggleItalic().run()}
        >
          <i className="bi bi-type-italic"></i>
        </Button>

        <Button
          type="button"
          variant={
            editor.isActive("heading", { level: 2 })
              ? "danger"
              : "outline-danger"
          }
          onClick={() =>
            editor.chain().focus().toggleHeading({ level: 2 }).run()
          }
        >
          <i className="bi bi-type-h1"></i>
        </Button>

        <Button
          type="button"
          variant="outline-danger"
          onClick={() => {
            const url = prompt("Enter image URL");
            if (url) editor.chain().focus().setImage({ src: url }).run();
          }}
        >
          <i className="bi bi-card-image"></i>
        </Button>

        <Button
          type="button"
          variant={editor.isActive("paragraph") ? "danger" : "outline-danger"}
          onClick={() => editor.chain().focus().setParagraph().run()}
        >
          <i className="bi bi-paragraph"></i>
        </Button>
      </Stack>

      <EditorContent editor={editor} />
    </div>
  );
}
