package runtime

import (
	"context"
	"fmt"
	"net/http"
	"net/http/httptest"
	"strings"
	"testing"

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

func TestMaaSClientRejectsUsageThatWouldRoundIntoSafeInteger(t *testing.T) {
	server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
		body := strings.Replace(
			validChatCompletion("response_1", "call_1", knowledgeSearchFunction, `{"query":"server"}`),
			`"input_tokens":17`, `"input_tokens":9007199254740990.5`, 1,
		)
		_, _ = fmt.Fprint(w, body)
	}))
	defer server.Close()

	result, err := (MaaSClient{BaseURL: server.URL, HTTPClient: server.Client()}).Generate(
		context.Background(), maasGenerateTestRequest(t, "kqa_fractional_usage"),
	)

	var runtimeErr *Error
	require.ErrorAs(t, err, &runtimeErr)
	require.Equal(t, CodeMaaSAccountingRecovery, runtimeErr.Code)
	require.Equal(t, map[string]any{"output_tokens": float64(3)}, result.Usage)
	require.Equal(t, "response_1", result.SettlementRef)
}
