package message

import (
	"context"
	"strings"

	"github.com/tidbcloud/AgentTeam/internal/coredb"
	"github.com/tidbcloud/AgentTeam/internal/store/storeerr"
)

func badRequest(message string) error { return storeerr.BadRequest(message) }

type CommandTagExecer interface {
	Exec(context.Context, string, ...any) (coredb.Result, error)
}

func uniqueViolationMatches(err error, constraints ...string) bool {
	constraint, ok := coredb.UniqueViolationConstraint(err)
	if !ok {
		return false
	}
	for _, expected := range constraints {
		if constraint == expected || strings.HasSuffix(constraint, "."+expected) {
			return true
		}
	}
	return false
}

func normalizeNonEmptyStrings(values []string) []string {
	if len(values) == 0 {
		return nil
	}

	normalized := make([]string, 0, len(values))
	seen := make(map[string]struct{}, len(values))
	for _, value := range values {
		trimmed := strings.TrimSpace(value)
		if trimmed == "" {
			continue
		}
		if _, exists := seen[trimmed]; exists {
			continue
		}
		seen[trimmed] = struct{}{}
		normalized = append(normalized, trimmed)
	}
	return normalized
}

func notFound(message string) error { return requestError{kind: ErrNotFound, message: message} }
