package kb

import (
	"context"
	"testing"
	"time"

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

func TestStoreFiltersAndDecoratesKnowledgeBaseCollectionTaxonomy(t *testing.T) {
	ctx := context.Background()
	store := newTestStore(t)
	now := time.Date(2026, 8, 6, 1, 2, 3, 0, time.UTC)
	group := KnowledgeBaseGroup{ID: "kbcg_ops", WorkspaceID: "wsp_a", Name: "Operations", Description: "Operational guides", Color: "#5966AE", CreatedBy: "user", UpdatedBy: "user", CreatedAt: now, UpdatedAt: now}
	require.NoError(t, store.db.Create(&group).Error)
	tags := []KnowledgeBaseTag{
		{ID: "kbct_prod", WorkspaceID: "wsp_a", Name: "Production", Color: "#387A69", SortOrder: 100, CreatedBy: "user", UpdatedBy: "user", CreatedAt: now, UpdatedAt: now},
		{ID: "kbct_runbook", WorkspaceID: "wsp_a", Name: "Runbook", Color: "#A95F49", SortOrder: 200, CreatedBy: "user", UpdatedBy: "user", CreatedAt: now, UpdatedAt: now},
	}
	require.NoError(t, store.db.Create(&tags).Error)
	for _, base := range []KnowledgeBase{
		{ID: "kb_both", WorkspaceID: "wsp_a", GroupID: group.ID, Name: "Incident response", IsActive: true, CreatedBy: "user", UpdatedBy: "user", CreatedAt: now, UpdatedAt: now.Add(time.Minute)},
		{ID: "kb_prod", WorkspaceID: "wsp_a", GroupID: group.ID, Name: "Deployments", IsActive: true, CreatedBy: "user", UpdatedBy: "user", CreatedAt: now, UpdatedAt: now},
	} {
		_, err := store.CreateKnowledgeBase(ctx, base)
		require.NoError(t, err)
	}
	require.NoError(t, store.ReplaceKnowledgeBaseTags(ctx, "wsp_a", "kb_both", "user", []string{"kbct_prod", "kbct_runbook"}, now))
	require.NoError(t, store.ReplaceKnowledgeBaseTags(ctx, "wsp_a", "kb_prod", "user", []string{"kbct_prod"}, now))
	for _, sourceID := range []string{"src_one", "src_two"} {
		_, err := store.CreateSource(ctx, Source{ID: sourceID, WorkspaceID: "wsp_a", KnowledgeBaseID: "kb_both", Name: sourceID, CreatedBy: "user", UpdatedBy: "user", CreatedAt: now, UpdatedAt: now})
		require.NoError(t, err)
	}

	andFiltered, err := store.ListKnowledgeBaseCollection(ctx, KnowledgeBaseCollectionOptions{WorkspaceID: "wsp_a", PrincipalID: "user", View: "all", TagIDs: []string{"kbct_prod", "kbct_runbook", "kbct_prod"}, Page: 1, PerPage: 20})
	require.NoError(t, err)
	require.Len(t, andFiltered.Items, 1)
	require.Equal(t, "kb_both", andFiltered.Items[0].ID)
	require.NoError(t, store.DecorateKnowledgeBaseTaxonomy(ctx, "wsp_a", andFiltered.Items))
	require.Equal(t, group.ID, andFiltered.Items[0].Group.ID)
	require.Equal(t, []string{"kbct_prod", "kbct_runbook"}, []string{andFiltered.Items[0].Tags[0].ID, andFiltered.Items[0].Tags[1].ID})
	require.Equal(t, int64(2), andFiltered.Items[0].SourceCount)

	tagSearch, err := store.ListKnowledgeBaseCollection(ctx, KnowledgeBaseCollectionOptions{WorkspaceID: "wsp_a", PrincipalID: "user", View: "all", Query: "production", Page: 1, PerPage: 20})
	require.NoError(t, err)
	require.Len(t, tagSearch.Items, 2)
}
