package mgmt

import (
	"testing"

	"github.com/stretchr/testify/require"
)

func TestResolveOffsetPaginationFirstPage(t *testing.T) {
	t.Parallel()

	page, err := ResolveOffsetPagination(" org-1 ", ListClustersOptions{
		PageSize:  50,
		ClusterID: " 123 ",
	})
	require.NoError(t, err)
	require.Equal(t, OffsetPagination{
		Page:      1,
		PageSize:  50,
		ClusterID: "123",
	}, page)
}

func TestOffsetPaginationTokenRoundTrip(t *testing.T) {
	t.Parallel()

	opts := ListClustersOptions{
		PageSize:  50,
		ClusterID: "123",
	}
	token, err := EncodeNextOffsetPageToken("org-1", opts, 1, true)
	require.NoError(t, err)
	require.NotEmpty(t, token)

	opts.PageToken = token
	page, err := ResolveOffsetPagination("org-1", opts)
	require.NoError(t, err)
	require.Equal(t, OffsetPagination{
		Page:      2,
		PageSize:  50,
		ClusterID: "123",
	}, page)
}

func TestResolveOffsetPaginationRejectsMismatchedFilters(t *testing.T) {
	t.Parallel()

	token, err := EncodeNextOffsetPageToken("org-1", ListClustersOptions{
		PageSize:  50,
		ClusterID: "123",
	}, 1, true)
	require.NoError(t, err)

	_, err = ResolveOffsetPagination("org-1", ListClustersOptions{
		PageSize:  50,
		ClusterID: "456",
		PageToken: token,
	})
	require.Error(t, err)
}

func TestEncodeNextOffsetPageTokenReturnsEmptyWithoutMorePages(t *testing.T) {
	t.Parallel()

	token, err := EncodeNextOffsetPageToken("org-1", ListClustersOptions{PageSize: 50}, 1, false)
	require.NoError(t, err)
	require.Empty(t, token)
}
