package trigger

import (
	"net/http"

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

// Action handles POST /api/v1/workspaces/:workspaceId/triggers/:triggerId:pause|resume.
// It pauses or resumes a trigger without using legacy action subpaths.
func (handler *LifecycleHandler) Action(request api.WorkspaceScopedRequest) (api.Response, error) {
	triggerID, action, err := api.ParseActionSegment(request.Gin.Param("triggerAction"), "triggerId")
	if err != nil {
		return api.Response{}, err
	}
	switch action {
	case "pause":
		return handler.mutate(request, triggerID, func(service TriggerService, ownerUserID string, workspaceID string, triggerID string) (trigger.TriggerView, error) {
			return service.PauseForOwner(request.Context(), ownerUserID, workspaceID, triggerID)
		})
	case "resume":
		return handler.mutate(request, triggerID, func(service TriggerService, ownerUserID string, workspaceID string, triggerID string) (trigger.TriggerView, error) {
			return service.ResumeForOwner(request.Context(), ownerUserID, workspaceID, triggerID)
		})
	default:
		return api.Response{}, api.NewHTTPError(http.StatusBadRequest, "Unsupported trigger action")
	}
}

func (handler *LifecycleHandler) mutate(request api.WorkspaceScopedRequest, triggerID string, fn func(TriggerService, string, string, string) (trigger.TriggerView, error)) (api.Response, error) {
	result, err := fn(handler.triggerService, request.UserID(), request.WorkspaceID(), triggerID)
	if err != nil {
		return api.Response{}, err
	}
	return api.OK(result), nil
}
