var SUBSTITUTION_TOKENS = {
    bbox: /!bbox!/g,
    scale_denominator: /!scale_denominator!/g,
    pixel_width: /!pixel_width!/g,
    pixel_height: /!pixel_height!/g
};

var SubstitutionTokens = {
    tokens: function(sql) {
        return Object.keys(SUBSTITUTION_TOKENS).filter(function(tokenName) {
            return !!sql.match(SUBSTITUTION_TOKENS[tokenName]);
        });
    },

    hasTokens: function(sql) {
        return this.tokens(sql).length > 0;
    },

    replace: function(sql, replaceValues) {
        Object.keys(replaceValues).forEach(function(token) {
            if (SUBSTITUTION_TOKENS[token]) {
                sql = sql.replace(SUBSTITUTION_TOKENS[token], replaceValues[token]);
            }
        });
        return sql;
    }
};

module.exports = SubstitutionTokens;
