package webagent

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

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

const maxAgentRuntimeFailureIDs = agent.MaxAgentRuntimeFailureIDs

func agentDirectoryOptionsFromRequest(r api.WorkspaceScopedRequest) (agent.AgentDirectoryOptions, error) {
	limit := 0
	if rawLimit := strings.TrimSpace(r.Gin.Query("limit")); rawLimit != "" {
		parsed, err := strconv.Atoi(rawLimit)
		if err != nil || parsed < 0 {
			return agent.AgentDirectoryOptions{}, api.NewHTTPError(http.StatusBadRequest, "invalid limit")
		}
		limit = parsed
	}
	return agent.AgentDirectoryOptions{
		Scope:                     strings.TrimSpace(r.Gin.Query("scope")),
		Limit:                     limit,
		Cursor:                    strings.TrimSpace(r.Gin.Query("cursor")),
		Query:                     strings.TrimSpace(r.Gin.Query("q")),
		IncludeReview:             parseBoolishQuery(r.Gin.Query("includeReview")),
		IncludeTeamAssignment:     parseBoolishQuery(r.Gin.Query("includeTeamAssignment")),
		IncludeCurrentRoleBinding: parseBoolishQuery(r.Gin.Query("includeCurrentRoleBinding")),
	}, nil
}

func parseBoolishQuery(raw string) bool {
	switch strings.ToLower(strings.TrimSpace(raw)) {
	case "1", "true", "yes":
		return true
	default:
		return false
	}
}
