package org.thymeleaf.dialect.springdata.decorator;

import java.util.Locale;

import org.springframework.data.domain.Page;
import org.thymeleaf.context.ITemplateContext;
import org.thymeleaf.dialect.springdata.util.Messages;
import org.thymeleaf.dialect.springdata.util.PageUtils;
import org.thymeleaf.dialect.springdata.util.Strings;
import org.thymeleaf.model.IProcessableElementTag;

abstract class AbstractPagerDecorator implements PaginationDecorator {

    public final String decorate(final IProcessableElementTag tag, final ITemplateContext context) {
        String bundleName = getClass().getSimpleName();
        Locale locale = context.getLocale();
        Page<?> page = PageUtils.findPage(context);

        // previous
        String previousPage = PageUtils.createPageUrl(context, page.getNumber() - 1);
        String prevKey = PageUtils.isFirstPage(page) ? "pager.previous" : "pager.previous.link";
        String prev = Messages.getMessage(bundleName, prevKey, locale, previousPage);

        // next
        String nextPage = PageUtils.createPageUrl(context, page.getNumber() + 1);
        String nextKey = page.isLast() ? "pager.next" : "pager.next.link";
        String next = Messages.getMessage(bundleName, nextKey, locale, nextPage);

        String content = Strings.concat(prev, next);

        return Messages.getMessage(bundleName, "pager", locale, content);
    }

}