package ape_test

import (
	"testing"

	"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/ape"
	"github.com/stretchr/testify/require"

	apeV2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/ape"
)

var (
	m = map[ape.TargetType]apeV2.TargetType{
		ape.TargetTypeUndefined: apeV2.TargetTypeUndefined,
		ape.TargetTypeNamespace: apeV2.TargetTypeNamespace,
		ape.TargetTypeContainer: apeV2.TargetTypeContainer,
		ape.TargetTypeUser:      apeV2.TargetTypeUser,
		ape.TargetTypeGroup:     apeV2.TargetTypeGroup,
	}
)

func TestTargetType(t *testing.T) {
	for typesdk, typev2 := range m {
		t.Run("from sdk to v2 "+typev2.String(), func(t *testing.T) {
			v2 := typesdk.ToV2()
			require.Equal(t, v2, typev2)
		})

		t.Run("from v2 to sdk "+typev2.String(), func(t *testing.T) {
			var typ ape.TargetType
			typ.FromV2(typev2)
			require.Equal(t, typesdk, typ)
		})
	}
}

func TestChainTarget(t *testing.T) {
	var (
		typ  = ape.TargetTypeNamespace
		name = "namespaceXXYYZZ"
	)

	t.Run("from sdk to v2", func(t *testing.T) {
		ct := ape.ChainTarget{
			TargetType: typ,
			Name:       name,
		}

		v2 := ct.ToV2()
		require.Equal(t, m[typ], v2.GetTargetType())
		require.Equal(t, name, v2.GetName())
	})

	t.Run("from v2 to sdk", func(t *testing.T) {
		v2 := &apeV2.ChainTarget{}
		v2.SetTargetType(m[typ])
		v2.SetName(name)

		var ct ape.ChainTarget
		ct.FromV2(v2)

		require.Equal(t, typ, ct.TargetType)
		require.Equal(t, name, ct.Name)
	})
}