var utils = require('../utils'),
    filters = require('../filters'),
    handleError = require('./frontend/error'),
    postLookup = require('./frontend/post-lookup'),
    renderEntry = require('./frontend/render-entry'),
    setRequestIsSecure = require('./frontend/secure');

// This here is a controller.
// It renders entries = individual posts or pages
// The "route" is handled in site/routes.js
module.exports = function entryController(req, res, next) {
    // Query database to find post
    return postLookup(req.path).then(function then(lookup) {
        // Format data 1
        var post = lookup ? lookup.post : false;

        if (!post) {
            return next();
        }

        // CASE: postlookup can detect options for example /edit, unknown options get ignored and end in 404
        if (lookup.isUnknownOption) {
            return next();
        }

        // CASE: last param is of url is /edit, redirect to admin
        if (lookup.isEditURL) {
            return utils.url.redirectToAdmin(302, res, '#/editor/' + post.id);
        }

        // CASE: permalink is not valid anymore, we redirect him permanently to the correct one
        if (post.url !== req.path) {
            return utils.url.redirect301(res, post.url);
        }

        setRequestIsSecure(req, post);

        filters.doFilter('prePostsRender', post, res.locals)
            .then(renderEntry(req, res));
    }).catch(handleError(next));
};