package run

import (
	"strings"

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

func (handler *Handler) Cancel(request api.WorkspaceScopedJSON[dto.WorkflowRunCancelActionRequest]) (api.Response, error) {
	id, err := requestRunID(request.WorkspaceScopedRequest)
	if err != nil {
		return api.Response{}, err
	}
	result, err := handler.service.Cancel(request.Context(), CancelInput{
		WorkspaceID: request.WorkspaceID(), RunID: id, Reason: request.Body.Reason,
		Actor: Actor{
			Type: ActorTypeHuman, ID: strings.TrimSpace(request.UserID()),
			MemberID: strings.TrimSpace(request.Workspace.MemberID),
		},
	})
	if err != nil {
		return api.Response{}, err
	}
	response := dto.WorkflowRunCancelResponse{
		Run: runResponse(result.Run, true), Replayed: result.Replayed,
	}
	if result.Event != nil {
		event := eventResponse(*result.Event)
		response.Event = &event
	}
	return api.OK(response), nil
}
