import { regexes } from './smileys';
/* eslint-disable no-useless-escape, max-len */
const replacePatterns = {
    // URLs starting with http://, https://, or ftp://
    '$1':
        /(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim,
    // URLs starting with "www." (without // before it, or it'd re-link the ones done above).
    '$1$2':
        /(^|[^\/])(www\.[\S]+(\b|$))/gim,
    // Change email addresses to mailto: links.
    '$1':
        /(([a-zA-Z0-9\-\_\.])+@[a-zA-Z\_]+?(\.[a-zA-Z]{2,6})+)/gim
};
/* eslint-enable no-useless-escape, max-len */
/**
 * Processes links and smileys in "body".
 *
 * @param  {string} body - The message body.
 * @returns {string} Message body with image tags and href tags.
 */
export function processReplacements(body) {
    // make links clickable + add smileys
    // non of the patterns we search contains a space, that's why we tokenize it
    // and after processing each token we join it again with the results
    // making sure we do only one replacement for a token
    const tokens = body.split(' ');
    const resultText = [];
    for (const token of tokens) {
        let replacedText;
        const tokenLength = token.length;
        for (const newString in replacePatterns) { // eslint-disable-line guard-for-in, max-len
            const replacePattern = replacePatterns[newString];
            replacedText = token.replace(replacePattern, newString);
            // replacement was done, stop doing any other replacements
            if (replacedText.length > tokenLength) {
                break;
            }
            replacedText = null;
        }
        // no replacement was done, then just check for smiley
        if (!replacedText) {
            replacedText = smilify(token);
        }
        resultText.push(replacedText);
    }
    return resultText.join(' ');
}
/**
 * Replaces common smiley strings with images.
 *
 * @param  {string} body - The message body.
 * @returns {string} Body returned with smiley replaced.
 */
function smilify(body) {
    if (!body) {
        return body;
    }
    let formattedBody = body;
    for (const smiley in regexes) {
        if (regexes.hasOwnProperty(smiley)) {
            formattedBody = formattedBody.replace(regexes[smiley],
                ` `);
        }
    }
    return formattedBody;
}
`);
        }
    }
    return formattedBody;
}