use v5.24;
use warnings;
use strict;
use utf8;

use Test::More;

use JWebmail::Plugin::Paginate;


subtest 'pagination' => sub {
    my %res;

    my $p = \&JWebmail::Plugin::Paginate::_paginate;

    %res = $p->(first_item => 0, page_size => 10, total_items => 55)->%*;

    is $res{first_item}, 0;
    is $res{last_item}, 9;
    is $res{total_items}, 55;

    is $res{page_size}, 10;
    is $res{total_pages}, 6;
    is $res{current_page}, 0;

    is_deeply $res{first_page}, [0, 10], 'first';
    is_deeply $res{prev_page}, [0, 10], 'prev';
    is_deeply $res{next_page}, [10, 20], 'next';
    is_deeply $res{last_page}, [50, 55], 'last';

    %res = $p->(first_item => 10, page_size => 10, total_items => 55)->%*;

    is $res{first_item}, 10;
    is $res{last_item}, 19;
    is $res{total_items}, 55;

    is $res{page_size}, 10;
    is $res{total_pages}, 6;
    is $res{current_page}, 1;

    is_deeply $res{first_page}, [0, 10], 'first';
    is_deeply $res{prev_page}, [0, 10], 'prev';
    is_deeply $res{next_page}, [20, 30], 'next';
    is_deeply $res{last_page}, [50, 55], 'last';

    %res = $p->(first_item => 20, page_size => 10, total_items => 55)->%*;

    is $res{first_item}, 20;
    is $res{last_item}, 29;
    is $res{total_items}, 55;

    is $res{page_size}, 10;
    is $res{total_pages}, 6;
    is $res{current_page}, 2;

    is_deeply $res{first_page}, [0, 10], 'first';
    is_deeply $res{prev_page}, [10, 20], 'prev';
    is_deeply $res{next_page}, [30, 40], 'next';
    is_deeply $res{last_page}, [50, 55], 'last';

    %res = $p->(first_item => 50, page_size => 10, total_items => 55)->%*;

    is $res{first_item}, 50;
    is $res{last_item}, 54;
    is $res{total_items}, 55;

    is $res{page_size}, 10;
    is $res{total_pages}, 6;
    is $res{current_page}, 5;

    is_deeply $res{first_page}, [0, 10], 'first';
    is_deeply $res{prev_page}, [40, 50], 'prev';
    is_deeply $res{next_page}, [50, 55], 'next';
    is_deeply $res{last_page}, [50, 55], 'last';

    %res = $p->(first_item => 0, page_size => 10, total_items => 0)->%*;

    ok !defined $res{first_item};
    ok !defined $res{last_item};
    is $res{total_items}, 0;

    is $res{page_size}, 10;
    is $res{total_pages}, 0;
    is $res{current_page}, 0;

    is_deeply $res{first_page}, [0, 0], 'first';
    is_deeply $res{prev_page}, [0, 0], 'prev';
    is_deeply $res{next_page}, [0, 0], 'next';
    is_deeply $res{last_page}, [0, 0], 'last';

    SKIP: {
        skip 'The first_item does not align with page boundaries and behaiviour is not specified.';

        %res = $p->(first_item => 19, page_size => 10, total_items => 55)->%*;

        is $res{first_item}, 20;
        is $res{last_item}, 29;
        is $res{total_items}, 55;

        is $res{page_size}, 10;
        is $res{total_pages}, 6;
        is $res{current_page}, 3;

        is_deeply $res{first_page}, [1, 10], 'first';
        is_deeply $res{prev_page}, [11, 20], 'prev';
        is_deeply $res{next_page}, [31, 40], 'next';
        is_deeply $res{last_page}, [51, 55], 'last';
    }

    done_testing;
};

done_testing;