/*
 * Vencord, a Discord client mod
 * Copyright (c) 2023 Vendicated and contributors
 * SPDX-License-Identifier: GPL-3.0-or-later
 */

import { Devs } from "@utils/constants.js";
import definePlugin from "@utils/types";
import { findByPropsLazy } from "@webpack";

const linkRegex = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)/;

const SlateTransforms = findByPropsLazy("insertText", "selectCommandOption");

export default definePlugin({
    name: "MaskedLinkPaste",
    authors: [Devs.TheSun],
    description: "Pasting a link while having text selected will paste a hyperlink",
    patches: [
        {
            find: ".selection,preventEmojiSurrogates:",
            replacement: {
                match: /(?<=\i.delete.{0,50})(\i)\.insertText\((\i)\)/,
                replace: "$self.handlePaste($1, $2, () => $&)"
            }
        }
    ],

    handlePaste(editor, content: string, originalBehavior: () => void) {
        if (content && linkRegex.test(content) && editor.operations?.[0]?.type === "remove_text") {
            SlateTransforms.insertText(
                editor,
                `[${editor.operations[0].text}](${content})`
            );
        }
        else originalBehavior();
    }
});
