package lake

import (
	"context"
	"testing"

	"github.com/stretchr/testify/require"

	"github.com/tidbcloud/aisupport/services/jsm-syncer/config"
)

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

	client := NewMockClient(config.LakeMockConfig{
		Enabled: true,
		Lakes: []config.LakeMockLake{{
			ID:     " lake-1 ",
			Name:   " Prod ",
			Tier:   " Business ",
			OrgID:  " org-1 ",
			Status: " Active ",
		}},
		Memberships: []config.LakeMockMembership{{
			LakeID: " lake-1 ",
			UserID: " user-1 ",
			Status: " active ",
		}},
	})

	require.True(t, client.Configured())

	lakes, err := client.ListLakes(context.Background(), ListOptions{Page: 1, PageSize: 1})
	require.NoError(t, err)
	require.Equal(t, 1, lakes.Total)
	require.Equal(t, []Lake{{
		ID:     "lake-1",
		Name:   "Prod",
		Tier:   "Business",
		OrgID:  "org-1",
		Status: "Active",
	}}, lakes.Lakes)

	memberships, err := client.ListMemberships(context.Background(), ListOptions{Page: 1, PageSize: 1})
	require.NoError(t, err)
	require.Equal(t, 1, memberships.Total)
	require.Equal(t, []Membership{{
		LakeID: "lake-1",
		UserID: "user-1",
		Status: "active",
	}}, memberships.Memberships)
}

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

	client := NewMockClient(config.LakeMockConfig{})
	require.False(t, client.Configured())

	lakes, err := client.ListLakes(context.Background(), ListOptions{})
	require.NoError(t, err)
	require.Empty(t, lakes.Lakes)
}

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

	client := NewMockClient(config.LakeMockConfig{
		Enabled: true,
		Lakes: []config.LakeMockLake{
			{ID: "lake-1"},
			{ID: "lake-2"},
			{ID: "lake-3"},
		},
	})

	page, err := client.ListLakes(context.Background(), ListOptions{Page: 2, PageSize: 2})
	require.NoError(t, err)
	require.Equal(t, 3, page.Total)
	require.Equal(t, []Lake{{ID: "lake-3"}}, page.Lakes)
}
