package plan

import (
	"net/http"

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

func (handler *ValidationHandler) Validate(r api.WorkspaceScopedJSON[dto.WorkflowPlanValidateRequest]) (api.Response, error) {
	source, err := requiredSource(r.Body.Source)
	if err != nil {
		return api.Response{}, err
	}
	return api.OK(validationResponse(handler.service.Validate(r.Context(), source))), nil
}

func requiredSource(source *string) (string, error) {
	if source == nil {
		return "", publicError(http.StatusBadRequest, "plan_invalid_request", "source is required")
	}
	return *source, nil
}

func (handler *ValidationHandler) ValidateDraft(r api.WorkspaceScopedJSON[dto.WorkflowPlanDraftValidateRequest]) (api.Response, error) {
	id, err := planID(r.WorkspaceScopedRequest)
	if err != nil {
		return api.Response{}, err
	}
	validation, err := handler.service.ValidateDraft(r.Context(), r.WorkspaceID(), id, r.Body.DraftRevision)
	if err != nil {
		return api.Response{}, err
	}
	return api.OK(validationResponse(validation)), nil
}
