package serviceactor

import (
	"testing"

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

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

	ref, err := InternalHandlerConnectionRef("agentteam.approval")
	require.NoError(t, err)
	require.Equal(t, "builtin:agentteam.approval", ref)
	key, ok := InternalHandlerKeyFromConnectionRef(ref)
	require.True(t, ok)
	require.Equal(t, "agentteam.approval", key)
}

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

	policy, ref, err := normalizeDeliveryDispatchRoute(RuntimeTransportKindInternalHandler, AppRuntimeDeliveryPolicyInternalHandler, "builtin:agentteam.approval")
	require.NoError(t, err)
	require.Equal(t, AppRuntimeDeliveryPolicyInternalHandler, policy)
	require.Equal(t, "builtin:agentteam.approval", ref)

	_, _, err = normalizeDeliveryDispatchRoute("external", AppRuntimeDeliveryPolicyInternalHandler, "builtin:agentteam.approval")
	require.Error(t, err)
	_, _, err = normalizeDeliveryDispatchRoute(RuntimeTransportKindInternalHandler, "external", "app_runtime")
	require.Error(t, err)
}

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

	for _, key := range []string{"", "with/slash", "space key", "builtin:key", string(make([]byte, 129))} {
		_, err := InternalHandlerConnectionRef(key)
		require.Error(t, err, key)
	}
}
