package dialectsfcrm

import (
	"github.com/nexuscrm/shared/pkg/dialect"
	querycodec "github.com/pingcap-inc/nexuscrm-app-packs/sfcrm/querycodec"
)

// runtimeQueryRoutes projects the codec-owned route facts into the transitional
// dialect manifest. The independently deployed AppService consumes the same
// RouteSpecs and Match functions directly.
func runtimeQueryRoutes() []dialect.Route {
	specs := querycodec.RouteSpecs()
	routes := make([]dialect.Route, 0, len(specs))
	for _, spec := range specs {
		// The transitional dialect already owns Tooling Query with its existing
		// Setup-permission gate and wire handler. The independent AppService uses
		// the codec route directly; do not register a second, ungated legacy route.
		if spec.Kind == querycodec.RouteToolingQuery {
			continue
		}
		routes = append(routes, dialect.Route{
			Method: spec.Method, Path: spec.RelativePath,
			Gate: dialect.Gate{Mode: dialect.GateNone}, Handler: queryCodecDialectHandler(spec.Kind),
		})
	}
	return routes
}

func queryCodecDialectHandler(kind querycodec.RouteKind) dialect.Handler {
	switch kind {
	case querycodec.RouteQuery:
		return QueryNeutralHandler
	case querycodec.RouteQueryAll:
		return QueryAllNeutralHandler
	case querycodec.RouteMore:
		return QueryMoreNeutralHandler
	default:
		return nil
	}
}
