/**
 * Determines if the requested page is out of bounds
 *
 * @param page current page
 * @param postsPerPage - number of blog rendered on each page
 * @param totalPosts - total blog in this category/total
 * @returns {boolean} if this is a valid page
 */
const isValidPage = function(page, postsPerPage, totalPosts)
{
    return !(page === 0 || page -1 >= totalPosts/postsPerPage);
};

module.exports=
    {
        /**
         * Renders two buttons on the bottom of the page to
         * go to the left or right
         *
         * Used by the home page and categories pages
         * @param baseURL -- base url of page being rendered
         * @param currentPage -- current page being rendered
         * @param postsPerPage -- number of blog on each page
         * @param totalPosts -- total amount of blog in the category
         * @returns {Promise} promise which renders the buttons
         */
        main: function(baseURL, currentPage, postsPerPage, totalPosts, templateContext)
        {
            if(typeof currentPage == "undefined")
                currentPage = 1;
            currentPage = Number(currentPage);

            if(!isValidPage(currentPage, postsPerPage, totalPosts))
            {
                reject("Invalid Page");
            }

            var paginationObject = new Object();

            var nextPage = currentPage + 1;
            var previousPage = currentPage - 1;


            var strippedURL = baseURL.split("?page=")[0];
            if (isValidPage(previousPage, postsPerPage, totalPosts))
            {
                paginationObject.previous = {url: strippedURL + "?page=" + previousPage};
            }

            if (isValidPage(nextPage, postsPerPage, totalPosts))
            {
                paginationObject.next = {url: strippedURL + "?page=" + nextPage};
            }

            var page = 1;
            var pages = [];
            while(isValidPage(page, postsPerPage, totalPosts))
            {
                if(page === currentPage)
                {
                    pages.push({isCurrent: true, number: page})
                }
                else
                {
                    pages.push({number: page, url: strippedURL + "?page=" + page})
                }
                page = page + 1;
            }
            paginationObject.pages = pages;
            templateContext.pagination = paginationObject;
        }
    };