package exec

import (
	"net/http"
	"net/http/httptest"
	"testing"

	"github.com/stretchr/testify/require"
	"github.com/tidbcloud/AgentTeam/desktop/internal/wire/apiclient"
)

func TestApiclientReadsBodyAtExactCeiling(t *testing.T) {
	for _, test := range []struct {
		name      string
		size      int
		wantTrunc bool
	}{
		{name: "exact ceiling", size: 64 * 1024, wantTrunc: false},
		{name: "one over ceiling", size: 64*1024 + 1, wantTrunc: true},
	} {
		t.Run(test.name, func(t *testing.T) {
			payload := make([]byte, test.size)
			for i := range payload {
				payload[i] = 'a'
			}
			server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
				w.Header().Set("Content-Type", "text/plain")
				w.WriteHeader(http.StatusBadGateway)
				_, _ = w.Write(payload)
			}))
			t.Cleanup(server.Close)

			var apiErr *apiclient.APIError
			err := (&apiclient.Client{
				ServerURL: server.URL, RouteWorkspaceID: "wsp_1", AgentID: "agt_1",
				AuthToken: "token", HTTPClient: server.Client(),
			}).Post(t.Context(), "/workflow/run", map[string]any{"action": "start"}, nil)
			require.Error(t, err)
			require.ErrorAs(t, err, &apiErr)
			require.Equal(t, test.wantTrunc, apiErr.Truncated)
		})
	}
}
