package teamworkflow

import (
	"strings"

	"github.com/tidbcloud/AgentTeam/internal/api"
	"github.com/tidbcloud/AgentTeam/internal/api/dto"
)

func (handler *CollectionHandler) List(request api.WorkspaceScopedRequest) (api.Response, error) {
	teamID, err := requiredParam(request, "teamId")
	if err != nil {
		return api.Response{}, err
	}
	limit, err := pageLimit(request)
	if err != nil {
		return api.Response{}, err
	}
	state, err := publicListState(request.Gin.Query("state"))
	if err != nil {
		return api.Response{}, err
	}
	page, err := handler.service.ListForUser(request.Context(), ListInput{
		UserID:      strings.TrimSpace(request.UserID()),
		WorkspaceID: strings.TrimSpace(request.WorkspaceID()),
		TeamID:      teamID,
		Search:      firstNonEmpty(request.Gin.Query("q"), request.Gin.Query("search")),
		State:       state,
		Limit:       limit,
		Cursor:      strings.TrimSpace(request.Gin.Query("cursor")),
	})
	if err != nil {
		return api.Response{}, err
	}
	items := make([]dto.TeamWorkflowResponse, 0, len(page.Items))
	for _, item := range page.Items {
		items = append(items, itemResponse(item))
	}
	return api.OK(dto.TeamWorkflowListResponse{Items: items, NextCursor: page.NextCursor}), nil
}
