package coredb

import (
	"context"
	"testing"

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

type structScanStub struct {
	gotDest any
}

func (stub *structScanStub) Get(_ context.Context, dest any, _ string, _ ...any) error {
	stub.gotDest = dest
	return nil
}

func (stub *structScanStub) Select(_ context.Context, dest any, _ string, _ ...any) error {
	stub.gotDest = dest
	return nil
}

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

	ctx := context.Background()
	var dest struct{}
	require.ErrorContains(t, Get(ctx, nil, &dest, "SELECT 1"), "coredb getter is not supported")
	require.ErrorContains(t, Select(ctx, nil, &[]struct{}{}, "SELECT 1"), "coredb selector is not supported")
}

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

	ctx := context.Background()
	stub := &structScanStub{}
	var dest struct{}
	require.NoError(t, Get(ctx, stub, &dest, "SELECT 1"))
	require.Same(t, &dest, stub.gotDest)

	var rows []struct{}
	require.NoError(t, Select(ctx, stub, &rows, "SELECT 1"))
	require.Same(t, &rows, stub.gotDest)
}
