package kbgovernance

import (
	"crypto/sha256"
	"encoding/hex"
	"testing"

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

func TestEncodePayloadNormalizesPublication(t *testing.T) {
	payload := PublicationPayload{
		SchemaVersion: PublicationPayloadSchema, WorkspaceID: "ws_1",
		KnowledgeBaseID: "kb_1", WorkingRevision: "kbr_1",
		ContentDigest: "content", SourceCount: 2, WikiReadyCount: 1,
		DashboardReadyCount: 1, SkippedCount: 2,
		RequesterID: "usr_1", IdempotencyKey: "request_1",
	}

	encoded, digest, err := EncodePayload(payload)
	require.NoError(t, err)
	require.Equal(t, `{"contentDigest":"content","dashboardReadyCount":1,"idempotencyKey":"request_1","knowledgeBaseId":"kb_1","requesterId":"usr_1","schemaVersion":1,"skippedCount":2,"sourceCount":2,"wikiReadyCount":1,"workingRevision":"kbr_1","workspaceId":"ws_1"}`, string(encoded))
	require.Equal(t, sha256Digest(encoded), digest)
}

func TestEncodePayloadNormalizesWikiGeneration(t *testing.T) {
	payload := WikiGenerationPayload{
		SchemaVersion: WikiGenerationPayloadSchema, WorkspaceID: "ws_1",
		KnowledgeBaseID: "kb_1", SourceID: "src_1", SourceRevision: "rev_1",
		SourceCommitSHA: "commit_1", Scope: "full", Language: "zh-CN",
		Reason: "Document it", RequesterID: "usr_1", IdempotencyKey: "request_1",
	}

	encoded, digest, err := EncodePayload(payload)
	require.NoError(t, err)
	require.Equal(t, `{"idempotencyKey":"request_1","knowledgeBaseId":"kb_1","language":"zh-CN","reason":"Document it","requesterId":"usr_1","schemaVersion":1,"scope":"full","sourceCommitSha":"commit_1","sourceId":"src_1","sourceRevision":"rev_1","workspaceId":"ws_1"}`, string(encoded))
	require.Equal(t, sha256Digest(encoded), digest)
}

func sha256Digest(value []byte) string {
	digest := sha256.Sum256(value)
	return hex.EncodeToString(digest[:])
}
