package exec

import (
	"context"
	"encoding/json"
	"io"
	"net/http"
	"net/http/httptest"
	"testing"

	"github.com/stretchr/testify/require"

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

func TestTeamRemoteUsesRuntimeRoutes(t *testing.T) {
	var requests []string
	server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		requests = append(requests, r.Method+" "+r.URL.RequestURI())
		require.Equal(t, "Bearer token", r.Header.Get("Authorization"))
		if r.URL.Path == "/api/v1/workspaces/ws/agents/agent/runtime/teams/update" {
			require.Equal(t, "request-1", r.Header.Get("Idempotency-Key"))
			require.Equal(t, "request-1", r.Header.Get("X-Request-ID"))
		}
		switch {
		case r.Method == http.MethodGet && r.URL.Path == "/api/v1/workspaces/ws/agents/agent/runtime/teams":
			_, _ = io.WriteString(w, `{"teams":[],"hasMore":false}`)
		case r.Method == http.MethodPost && r.URL.Path == "/api/v1/workspaces/ws/agents/agent/runtime/teams/get":
			_, _ = io.WriteString(w, `{"team":{"teamId":"team_0123456789abcd","name":"Core Team","description":"Duties","members":[]}}`)
		case r.Method == http.MethodPost && r.URL.Path == "/api/v1/workspaces/ws/agents/agent/runtime/teams/update":
			var input teamUpdateRequest
			require.NoError(t, json.NewDecoder(r.Body).Decode(&input))
			require.Equal(t, "request-1", input.RequestID)
			_, _ = io.WriteString(w, `{"status":"pending"}`)
		default:
			http.NotFound(w, r)
		}
	}))
	defer server.Close()
	remote := teamRemote{client: &apiclient.Client{ServerURL: server.URL, AgentID: "agent", AuthToken: "token", RouteWorkspaceID: "ws", HTTPClient: server.Client()}}

	_, err := remote.list(context.Background(), teamListInput{})
	require.NoError(t, err)
	_, err = remote.get(context.Background(), "team_0123456789abcd")
	require.NoError(t, err)
	description := "New duties"
	_, err = remote.update(context.Background(), "team_0123456789abcd", teamUpdateRequest{RequestID: "request-1", Description: &description})
	require.NoError(t, err)
	require.Equal(t, []string{
		"GET /api/v1/workspaces/ws/agents/agent/runtime/teams",
		"POST /api/v1/workspaces/ws/agents/agent/runtime/teams/get",
		"POST /api/v1/workspaces/ws/agents/agent/runtime/teams/update",
	}, requests)
}
