package schedule

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

// Get handles GET /api/v1/workspaces/:workspaceId/schedules/:scheduleId.
func (handler *DetailHandler) Get(request api.WorkspaceScopedRequest) (api.Response, error) {
	result, err := handler.scheduleService.GetScheduleForOwner(request.Context(), request.UserID(), request.WorkspaceID(), scheduleID(request.Gin))
	if err != nil {
		return api.Response{}, err
	}
	return api.OK(result), nil
}

// Update handles PATCH /api/v1/workspaces/:workspaceId/schedules/:scheduleId.
func (handler *DetailHandler) Update(r api.WorkspaceScopedJSON[dto.ScheduleMutationRequest]) (api.Response, error) {
	result, err := handler.scheduleService.UpdateScheduleForOwner(r.Context(), r.UserID(), r.WorkspaceID(), scheduleID(r.Gin), converter.FromScheduleMutationRequest(r.Body))
	if err != nil {
		return api.Response{}, err
	}
	return api.OK(result), nil
}

// Delete handles DELETE /api/v1/workspaces/:workspaceId/schedules/:scheduleId.
func (handler *DetailHandler) Delete(request api.WorkspaceScopedRequest) (api.Response, error) {
	if err := handler.scheduleService.DeleteScheduleForOwner(request.Context(), request.UserID(), request.WorkspaceID(), scheduleID(request.Gin)); err != nil {
		return api.Response{}, err
	}
	return api.OK(dto.ScheduleDeleteResponse{Deleted: true}), nil
}
