/*
This file is part of the Notesnook project (https://notesnook.com/)

Copyright (C) 2023 Streetwriters (Private) Limited

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
import "@tiptap/extension-text-style";
import { Extension } from "@tiptap/core";
import { getFontById } from "../../utils/font";
export const FontFamily = Extension.create({
    name: "fontFamily",
    addOptions() {
        return {
            types: ["textStyle"]
        };
    },
    addGlobalAttributes() {
        return [
            {
                types: this.options.types,
                attributes: {
                    fontFamily: {
                        default: null,
                        parseHTML: (element) => { var _a; return (_a = element.style.fontFamily) === null || _a === void 0 ? void 0 : _a.replace(/['"]+/g, ""); },
                        renderHTML: (attributes) => {
                            var _a;
                            if (!attributes.fontFamily) {
                                return {};
                            }
                            const realFontFamily = attributes["data-font-family"] || attributes.fontFamily;
                            const font = ((_a = getFontById(realFontFamily)) === null || _a === void 0 ? void 0 : _a.font) || attributes.fontFamily;
                            return {
                                "data-font-family": realFontFamily,
                                style: `font-family: ${font}`
                            };
                        }
                    }
                }
            }
        ];
    },
    addCommands() {
        return {
            setFontFamily: (fontFamily) => ({ chain }) => {
                return chain().setMark("textStyle", { fontFamily }).run();
            },
            unsetFontFamily: () => ({ chain }) => {
                return chain()
                    .setMark("textStyle", { fontFamily: null })
                    .removeEmptyTextStyle()
                    .run();
            }
        };
    }
});
