// const escapeHtml  = (
//     // eslint-disable-next-line @typescript-eslint/no-var-requires
//     (mod) => (mod && mod.__esModule) ? mod : { "default": mod })(require("escape-html")
// ).default;
import { escape as escapeHtml } from 'html-escaper';

const getRegexPattern = (tag: string) => 
    new RegExp(`<\\s*${tag}[^>]*>[\\s\\S]*?(<\\s*\\/\\s*${tag}[^>]*>|$)`, 'gi');

const REGEX_PATTERN = {
    SCRIPT: getRegexPattern('script'),
    STYLE: getRegexPattern('style'),
};

const findProhibitedTags = (...regexes: Array<RegExp>) => 
    (str: string) => regexes.reduce((acc, regex) =>  [...acc, ...(str.match(regex) || [])],[]);

const getProhibitedTags = (str: string): Array<string> => 
    findProhibitedTags(...Object.values(REGEX_PATTERN))(str);

const escapeProhibitedTag = (str: string, match: string) => 
    str.replace(match, escapeHtml(match));

export const escapeHtmlString = (str: string) => {
    if(!str || typeof str !== 'string') return str;

    return getProhibitedTags(str).
        reduce(escapeProhibitedTag, str);
};