package schedule

import (
	"net/http"

	"github.com/tidbcloud/AgentTeam/internal/api"
	"github.com/tidbcloud/AgentTeam/internal/schedule/manage"
)

// Action handles POST /api/v1/workspaces/:workspaceId/schedules/:scheduleId:pause|resume.
func (handler *LifecycleHandler) Action(request api.WorkspaceScopedRequest) (api.Response, error) {
	scheduleID, action, err := api.ParseActionSegment(request.Gin.Param("scheduleAction"), "scheduleId")
	if err != nil {
		return api.Response{}, err
	}
	switch action {
	case "pause":
		return handler.mutate(request, scheduleID, func(service Service, ownerUserID string, workspaceID string, scheduleID string) (manage.ScheduleView, error) {
			return service.PauseScheduleForOwner(request.Context(), ownerUserID, workspaceID, scheduleID)
		})
	case "resume":
		return handler.mutate(request, scheduleID, func(service Service, ownerUserID string, workspaceID string, scheduleID string) (manage.ScheduleView, error) {
			return service.ResumeScheduleForOwner(request.Context(), ownerUserID, workspaceID, scheduleID)
		})
	default:
		return api.Response{}, api.NewHTTPError(http.StatusBadRequest, "Unsupported schedule action")
	}
}

func (handler *LifecycleHandler) mutate(request api.WorkspaceScopedRequest, scheduleID string, fn func(Service, string, string, string) (manage.ScheduleView, error)) (api.Response, error) {
	result, err := fn(handler.scheduleService, request.UserID(), request.WorkspaceID(), scheduleID)
	if err != nil {
		return api.Response{}, err
	}
	return api.OK(result), nil
}
