package trigger

import (
	"github.com/tidbcloud/AgentTeam/internal/api"
	"github.com/tidbcloud/AgentTeam/internal/api/dto"
	"github.com/tidbcloud/AgentTeam/internal/api/dto/converter"
)

// List handles GET /api/v1/workspaces/:workspaceId/triggers.
// It returns a filtered list of triggers owned by the authenticated user in the current workspace.
func (handler *CollectionHandler) List(request api.WorkspaceScopedRequest) (api.Response, error) {
	filter, err := listFilterFromRequest(request.Gin)
	if err != nil {
		return api.Response{}, err
	}
	result, err := handler.triggerService.ListForOwnerWithFilter(
		request.Context(),
		request.UserID(),
		request.WorkspaceID(),
		filter,
	)
	if err != nil {
		return api.Response{}, err
	}
	return api.OK(dto.TriggerListResponse(result)), nil
}

// Create handles POST /api/v1/workspaces/:workspaceId/triggers.
// It creates a new trigger for the authenticated user in the current workspace from the JSON request body.
func (handler *CollectionHandler) Create(r api.WorkspaceScopedJSON[dto.TriggerMutationRequest]) (api.Response, error) {
	body := r.Body
	result, err := handler.triggerService.CreateForOwner(r.Context(), r.UserID(), r.WorkspaceID(), converter.FromTriggerMutationRequest(body))
	if err != nil {
		return api.Response{}, err
	}
	return api.OK(result), nil
}
