package teamworkflow

import (
	"net/http"
	"strconv"
	"strings"

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

func requiredParam(request api.WorkspaceScopedRequest, name string) (string, error) {
	value := strings.TrimSpace(request.Gin.Param(name))
	if value == "" {
		return "", api.NewHTTPErrorWithCode(http.StatusBadRequest, name+" is required", "team_workflow_invalid_request")
	}
	return value, nil
}

func pageLimit(request api.WorkspaceScopedRequest) (int, error) {
	raw := strings.TrimSpace(request.Gin.Query("limit"))
	if raw == "" {
		return 0, nil
	}
	value, err := strconv.Atoi(raw)
	if err != nil || value < 1 || value > 100 {
		return 0, api.NewHTTPErrorWithCode(http.StatusBadRequest, "limit must be between 1 and 100", "team_workflow_invalid_limit")
	}
	return value, nil
}

func publicListState(raw string) (string, error) {
	switch value := strings.ToLower(strings.TrimSpace(raw)); value {
	case "", "all":
		// The public collection is always non-deleted. "all" means all visible
		// lifecycle states, never internal tombstones.
		return "", nil
	case "active", "archived", "generating", "failed":
		return value, nil
	default:
		return "", api.NewHTTPErrorWithCode(http.StatusBadRequest, "state is not a public Team Workflow lifecycle filter", "team_workflow_invalid_state")
	}
}

func firstNonEmpty(values ...string) string {
	for _, value := range values {
		if value = strings.TrimSpace(value); value != "" {
			return value
		}
	}
	return ""
}
