package admin

import (
	"context"
	"errors"
	"testing"

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

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

	require.ErrorContains(t, Options{}.Validate(), "RequireSystemAdminUser")
	require.NoError(t, Options{RequireSystemAdminUser: func(context.Context, string) error { return nil }}.Validate())
}

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

	sentinel := errors.New("not admin")
	var gotUserID string
	store := New(nil, Options{RequireSystemAdminUser: func(_ context.Context, userID string) error {
		gotUserID = userID
		return sentinel
	}})

	err := store.requireSystemAdminUser(context.Background(), "usr_1")
	require.ErrorIs(t, err, sentinel)
	require.Equal(t, "usr_1", gotUserID)
	require.NoError(t, store.Validate())
}

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

	require.Equal(t, 100, clampAdminLimit(0, 100))
	require.Equal(t, 50, clampAdminLimit(50, 100))
	require.Equal(t, 200, clampAdminLimit(1000, 100))
}
