'use strict';

require('./util/handlebars-helpers.js');

// ----------------------
// - import controllers -
// ----------------------
const homeController = require('./controllers/home_controller.js');
const postsController = require('./controllers/posts_controller.js');
const usersController = require('./controllers/users_controller.js');
const helpController = require('./controllers/help_controller.js');
const authController = require('./controllers/auth_controller.js');
const commentsController = require('./controllers/comments_controller.js');
const historyController = require('./controllers/history_controller.js');
const tagsController = require('./controllers/tags_controller.js');

// -----------------
// - setup routing -
// -----------------
const page = require('page');

page('/', () => { homeController.indexRoute(); });

page('/upload', () => { postsController.uploadPostsRoute(); });
page('/posts', () => { postsController.listPostsRoute(); });
page('/post/:id', id => { postsController.showPostRoute(id); });
page('/post/:id/edit', id => { postsController.editPostRoute(id); });

page('/register', () => { usersController.createUserRoute(); });
page('/users', () => { usersController.listUsersRoute(); });

page(
    '/user/:name',
    (ctx, next) => {
        usersController.showUserRoute(ctx.params.name);
    });

page(
    '/user/:name/edit',
    (ctx, next) => {
        usersController.editUserRoute(ctx.params.name);
    });

page('/history', () => { historyController.showHistoryRoute(); });
page('/tags', () => { tagsController.listTagsRoute(); });
page('/comments', () => { commentsController.listCommentsRoute(); });
page(/\/password-reset\/([^:]+):([^:]+)$/,
    (ctx, next) => {
        authController.passwordResetFinishRoute(ctx.params[0], ctx.params[1]);
    });
page('/password-reset', () => { authController.passwordResetRoute(); });
page('/login', () => { authController.loginRoute(); });
page('/logout', () => { authController.logoutRoute(); });

page(
    '/help/:section',
    (ctx, next) => {
        helpController.showHelpRoute(ctx.params.section);
    });
page('/help', () => { helpController.showHelpRoute(); });

page('*', () => { homeController.notFoundRoute(); });

page();