package approval

import (
	"testing"
	"time"

	"github.com/stretchr/testify/require"
	"github.com/tidbcloud/AgentTeam/internal/kbgovernance"
)

func TestNormalizeCreateAcceptsCurrentKnowledgeBasePayloads(t *testing.T) {
	publicationJSON, publicationDigest, err := kbgovernance.EncodePayload(kbgovernance.PublicationPayload{
		SchemaVersion: kbgovernance.PublicationPayloadSchema,
		WorkspaceID:   "ws_1", KnowledgeBaseID: "kb_1", WorkingRevision: "kbr_1",
		ContentDigest: "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
		RequesterID:   "usr_1", IdempotencyKey: "publication_1",
	})
	require.NoError(t, err)
	wikiJSON, wikiDigest, err := kbgovernance.EncodePayload(kbgovernance.WikiGenerationPayload{
		SchemaVersion: kbgovernance.WikiGenerationPayloadSchema,
		WorkspaceID:   "ws_1", KnowledgeBaseID: "kb_1", SourceID: "src_1",
		SourceRevision: "rev_1", SourceCommitSHA: "commit_1",
		Scope: "full", Language: "en", RequesterID: "usr_1", IdempotencyKey: "wiki_1",
	})
	require.NoError(t, err)

	for _, test := range []struct {
		name, subjectType, digest string
		payload                   []byte
	}{
		{name: "publication", subjectType: kbgovernance.PublicationSubjectType, payload: publicationJSON, digest: publicationDigest},
		{name: "wiki generation", subjectType: kbgovernance.WikiGenerationSubjectType, payload: wikiJSON, digest: wikiDigest},
	} {
		t.Run(test.name, func(t *testing.T) {
			normalized, err := normalizeCreate(CreateParams{
				ID: "appr_1", WorkspaceID: "ws_1", SubjectType: test.subjectType,
				SubjectRef: "request_1", SubjectVersion: 1,
				Payload: test.payload, PayloadDigest: test.digest,
				ApplicantMemberID: "mem_applicant", ApproverMemberIDs: []string{"mem_approver"},
				Now: time.Unix(1, 0),
			})
			require.NoError(t, err)
			require.Equal(t, test.payload, normalized.Payload)
		})
	}
}
