'use strict';

const emoji_replace_find = require('./find.cjs');
require('../convert.cjs');
require('../data.cjs');
require('../format.cjs');

function findAndReplaceEmojisInText(regexp, content, callback) {
  const matches = emoji_replace_find.getEmojiMatchesInText(regexp, content);
  if (!matches.length) {
    return null;
  }
  const sortedMatches = emoji_replace_find.sortEmojiMatchesInText(content, matches);
  let result = "";
  let replaced = false;
  for (let i = 0; i < sortedMatches.length; i++) {
    const item = sortedMatches[i];
    result += item.prev;
    const replacement = callback(
      {
        ...item.match
      },
      result
    );
    if (replacement === void 0) {
      result += item.match.match;
    } else {
      result += replacement;
      replaced = true;
    }
  }
  result += sortedMatches[sortedMatches.length - 1].next;
  return replaced ? result : null;
}

exports.findAndReplaceEmojisInText = findAndReplaceEmojisInText;