package protocol

import (
	"testing"

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

func TestStripCitationDestinationsPreservesMarkersAndScrubsAllAuthorities(t *testing.T) {
	input := "Answer [E1](agentteam-kqa-citation://kqs_1/kqc_abcdefghijklmn).\n\n" +
		"`[E2](agentteam-kqa-citation://kqs_1/kqc_literalmarker)`\n\n" +
		"```text\n[E3](agentteam-kqa-citation://kqs_1/kqc_literalblock)\n```"

	require.Equal(t,
		"Answer [E1].\n\n"+
			"`[E2]`\n\n"+
			"```text\n[E3]\n```",
		StripCitationDestinations(input),
	)
}

func TestPrepareSharedEvidenceMarkdownPreservesVerifiedMarkersAsShareEvidence(t *testing.T) {
	input := "Verified [E1](agentteam-kqa-citation://kqs_1/kqc_abcdefghijklmn), " +
		"web [E2](https://example.com/private), and plain [E3].\n\n" +
		"`[E4](agentteam-kqa-citation://kqs_1/kqc_literalmarker)`\n\n" +
		"```text\n[E5](agentteam-kqa-citation://kqs_1/kqc_literalblock)\n```"

	result, references, err := PrepareSharedEvidenceMarkdown(input)
	require.NoError(t, err)
	require.Equal(t,
		"Verified [E1](agentteam-kqa-shared-evidence://E1), "+
			"web [E2](https://example.com/private), and plain [E3].\n\n"+
			"`[E4]`\n\n"+
			"```text\n[E5]\n```",
		result,
	)
	require.Equal(t, []SharedEvidenceReference{{
		EvidenceID: "E1", CitationID: "kqc_abcdefghijklmn",
	}}, references)
}

func TestPrepareSharedEvidenceMarkdownRejectsAmbiguousEvidenceMapping(t *testing.T) {
	_, _, err := PrepareSharedEvidenceMarkdown(
		"[E1](agentteam-kqa-citation://kqs_1/kqc_abcdefghijklmn) and " +
			"[E1](agentteam-kqa-citation://kqs_1/kqc_nmlkjihgfedcba)",
	)
	require.Error(t, err)
}

func TestEvidencePresentationNormalizationSkipsMarkdownCode(t *testing.T) {
	hrefByEvidenceID := map[string]string{
		"E1": "agentteam-kqa-citation://kqs_1/kqc_abcdefghijklmn",
		"E2": "agentteam-kqa-citation://kqs_1/kqc_abcdefghijklmn",
	}
	require.Equal(t,
		"Answer [E1](agentteam-kqa-citation://kqs_1/kqc_abcdefghijklmn) and later [E2](agentteam-kqa-citation://kqs_1/kqc_abcdefghijklmn).\n\n"+
			"`[E1](agentteam-kqa-citation://kqs_1/kqc_abcdefghijklmn) [E2](agentteam-kqa-citation://kqs_1/kqc_abcdefghijklmn)`",
		CollapseAdjacentEvidenceLinks(
			"Answer [E1](agentteam-kqa-citation://kqs_1/kqc_abcdefghijklmn) [E2](agentteam-kqa-citation://kqs_1/kqc_abcdefghijklmn) and later [E2](agentteam-kqa-citation://kqs_1/kqc_abcdefghijklmn).\n\n"+
				"`[E1](agentteam-kqa-citation://kqs_1/kqc_abcdefghijklmn) [E2](agentteam-kqa-citation://kqs_1/kqc_abcdefghijklmn)`",
			hrefByEvidenceID,
		),
	)
	require.True(t, IsEvidenceOnlyMarkdown("[E1] [E2]"))
	require.False(t, IsEvidenceOnlyMarkdown("`[E1]`"))
	require.False(t, IsEvidenceOnlyMarkdown("Answer [E1]"))
}
