


plapi := import("plapi")
ll := import("@platforma-sdk/workflow-tengo:ll")

_api := plapi.apiVersion
if is_undefined(_api) {
	_api = 0
}

_isEnabled := func(featName) {
	_checker := plapi.isFeatureEnabled
	if is_undefined(_checker) {
		return false
	}

	return _checker(featName)
}

_executors := undefined
_hasRunner := func(e_id) {
	if is_undefined(_executors) {
		_executors = {}
		for e in plapi.getExecutors() {
			_executors[e] = true
		}
	}

	return !is_undefined(_executors[e_id])
}


_hasGetResourceTypesFor := ll.methodExists(plapi, "getResourceTypesFor")



_getResourceTypesFor := func(queueName) {
	if !_hasGetResourceTypesFor {
		return undefined
	}
	return plapi.getResourceTypesFor(queueName)
}

export ll.toStrict({
	hasExec:                    _hasRunner("executor"),     // local binary execution is available
	hasBatch:                   _hasRunner("batch"),        // batch system execution is available


	getResourceTypes:           _getResourceTypesFor,

	pureFutureFields:           _isEnabled("pureFutureFields")   || _api >= 1, // 'pure' future fields magic that provides deduplication
	commandExpressions:         _isEnabled("commandExpressions") || _api >= 2, // rich expressions in command arguments ( {{ system.ram_bytes / 20 }} )


	serviceFields: _isEnabled("serviceFields"),





	fullFeaturedApi:        _isEnabled("fullFeaturedAPI"),


	hasBlobSize:            ll.methodExists(plapi, "getBlobSize"),


	isDockerAvailable:        _isEnabled("dockerSupport"),





	hasGpu:                   _isEnabled("gpuAvailable"),


	secretEnvSupport:         _isEnabled("secretEnvSupport"),


	contextDomainQuery:       _isEnabled("contextDomainQuery")
})
