% use POSIX;

% my $last_page    = POSIX::ceil($total / $limit);
% my $current_page = int($offset / $limit) + 1;
% my $prev_offset  = ($offset - $limit) < 0 ? 0 : $offset - $limit;
% my $next_offset  = $offset + $limit;
% my $last_offset  = ($last_page - 1) * $limit;

<nav class="text-center">
  <ul class="pagination">
    % if ($current_page == 1) {
      <li class="page-item disabled">
        <a class="page-link">First</a>
    % }
    % else {
      <li class="page-item">
        % my $url = url_with->query({offset => 0});
        <a class="page-link" href="<%= $url %>">First</a>
    % }
    </li>
    % if ($current_page == 1) {
      <li class="page-item disabled">
        <a class="page-link">Previous</a>
    % }
    % else {
      <li class="page-item">
        % my $url = url_with->query({offset => $prev_offset});
        <a class="page-link" href="<%= $url %>">Previous</a>
    % }
    </li>
    % my $start = $current_page >= 3 ? $current_page - 2 : 1;
    % $start = $start >= ($last_page - 4) ? $last_page - 4 : $start;
    % $start = 1 if $start < 1;
    % my $end = $last_page < ($start + 4) ? $last_page : $start + 4;
    % for my $i ($start .. $end) {
      % if ($i == $current_page) {
        <li class="page-item active"><a class="page-link"><%= $i %></a></li>
      % }
      % else {
        <li class="page-item">
          % my $url = url_with->query({offset => ($i - 1) * $limit});
          <a class="page-link" href="<%= $url %>"><%= $i %></a>
        </li>
      % }
    % }
    % if ($current_page >= $last_page) {
      <li class="page-item disabled">
        <a class="page-link">Next</a>
    % }
    % else {
      <li class="page-item">
        % my $url = url_with->query({offset => $next_offset});
        <a class="page-link" href="<%= $url %>">Next</a>
    % }
    </li>
    % if ($current_page >= $last_page) {
      <li class="page-item disabled">
        <a class="page-link">Last</a>
    % }
    % else {
      <li class="page-item">
        % my $url = url_with->query({offset => $last_offset});
        <a class="page-link" href="<%= $url %>">Last</a>
    % }
    </li>
  </ul>
</nav>