package agent

import (
	"testing"

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

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

	seedFiles, activePath := materializationSeedFilesFromRoleManifest([]roleManifestItem{
		{ItemType: roleDefinitionAssetItemType, Name: "IDENTITY.md", Content: "# Reviewer\n"},
		{ItemType: portableKnowledgeItemType, Name: "runbook", Content: "# Runbook\n"},
		{ItemType: portableKnowledgeItemType, Name: "MEMORY.md", Content: "skip"},
		{ItemType: portableKnowledgeItemType, Name: "archive", Content: "skip"},
		{ItemType: portableSkillItemType, Name: "reviewer", Content: "name: reviewer\n"},
		{ItemType: portableSkillItemType, Name: "..", Content: "skip"},
	}, "memory/system/identity.md")

	require.Equal(t, "memory/system/identity.md", activePath)
	require.Equal(t, []WorkspaceSeedFile{
		{Path: "memory/system/identity.md", Content: "# Reviewer\n"},
		{Path: ".agents/skills/reviewer/SKILL.md", Content: "name: reviewer\n"},
		{Path: ".agents/knowledge/runbook.md", Content: "# Runbook\n"},
	}, seedFiles)
}

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

	seedFiles, activePath := materializationSeedFilesFromRoleManifest([]roleManifestItem{{
		ItemType: roleDefinitionAssetItemType,
		Name:     "memory/system/identity.md",
		Content:  "# Local\n",
	}}, "")

	require.Equal(t, "memory/system/identity.md", activePath)
	require.Equal(t, []WorkspaceSeedFile{{Path: "memory/system/identity.md", Content: "# Local\n"}}, seedFiles)
}

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

	materialization := workspaceMaterializationFromRoleBinding(
		&roleBindingMaterialization{
			RoleID:               "role_1",
			RoleVersionID:        "rv_1",
			BindingKind:          "preset_derived",
			ActiveDefinitionPath: "memory/system/identity.md",
		},
		[]roleManifestItem{{
			ItemType: roleDefinitionAssetItemType,
			Name:     "memory/system/identity.md",
			Content:  "# Preset\n",
		}},
	)

	require.NotNil(t, materialization)
	require.Equal(t, "role_1", materialization.RoleID)
	require.Equal(t, "preset_derived", materialization.SourceKind)
	require.Equal(t, "rv_1", materialization.SourceRef)
	require.Equal(t, []WorkspaceSeedFile{{Path: "memory/system/identity.md", Content: "# Preset\n"}}, materialization.SeedFiles)
}
