package run

import (
	"encoding/base64"
	"encoding/json"
	"net/http"
	"testing"

	"github.com/stretchr/testify/require"

	"github.com/tidbcloud/AgentTeam/internal/workflow/runartifact"
)

func TestReadArtifactRequiresCompleteReferenceAndCarriesBoundPageInputs(t *testing.T) {
	draft, err := runartifact.NewDraftForKind(runartifact.KindJoinAggregate, "wsp_1", "wri_1", "join", "act_join", []byte(`{"value":"exact"}`))
	require.NoError(t, err)
	encoded, err := json.Marshal(draft.Ref)
	require.NoError(t, err)
	fake := &fakeService{}
	handler := NewHandler(fake)
	request := humanRunRequest(t, http.MethodGet, "/workflow/runs/wri_1/artifacts/read?reference="+base64.RawURLEncoding.EncodeToString(encoded)+"&section=root&path=value&cursor=cursor-1&limit=32", map[string]string{
		"runId": "wri_1",
	})
	response, err := handler.ReadArtifact(request)
	require.NoError(t, err)
	body := response.Body.(map[string]any)
	require.Equal(t, "root", body["section"])
	require.Equal(t, []string{"value"}, body["path"])
	require.Equal(t, "wsp_1", fake.artifactInput.Reference.WorkspaceID)
	require.Equal(t, "wri_1", fake.artifactInput.RunID)
	require.Equal(t, []string{"value"}, fake.artifactInput.Path)
	require.Equal(t, "cursor-1", fake.artifactInput.Cursor)
	require.Equal(t, 32, fake.artifactInput.Limit)

	bad := humanRunRequest(t, http.MethodGet, "/workflow/runs/wri_1/artifacts/read?reference=not-base64", map[string]string{"runId": "wri_1"})
	_, err = handler.ReadArtifact(bad)
	require.Error(t, err)
}
