// # CacheControl Middleware
// Usage: cacheControl(profile), where profile is one of 'public' or 'private'
// After: checkIsPrivate
// Before: routes
// App: Admin|Site|API
//
// Allows each app to declare its own default caching rules

var _   = require('lodash'),
    config = require('../../config'),
    cacheControl;

cacheControl = function cacheControl(options) {
    var profiles = {
            public: 'public, max-age=' + config.get('caching:frontend:maxAge'),
            private: 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0'
        },
        output;

    if (_.isString(options) && profiles.hasOwnProperty(options)) {
        output = profiles[options];
    }

    return function cacheControlHeaders(req, res, next) {
        if (output) {
            if (res.isPrivateBlog) {
                res.set({'Cache-Control': profiles.private});
            } else {
                res.set({'Cache-Control': output});
            }
        }
        next();
    };
};

module.exports = cacheControl;
