// Copyright (c) 2024 Celestino Amoroso (celestino.amoroso@gmail.com).
// All rights reserved.

// global-context.go
package expr

import "path/filepath"

var globalCtx *SimpleStore

func ImportInContext(name string) (exists bool) {
	var mod *module
	if mod, exists = moduleRegister[name]; exists {
		mod.importFunc(globalCtx)
		mod.imported = true
	}
	return
}

func ImportInContextByGlobPattern(pattern string) (count int, err error) {
	var matched bool
	for name, mod := range moduleRegister {
		if matched, err = filepath.Match(pattern, name); err == nil {
			if matched {
				count++
				mod.importFunc(globalCtx)
				mod.imported = true
			}
		} else {
			break
		}
	}
	return
}

func GetVar(ctx ExprContext, name string) (value any, exists bool) {
	if value, exists = ctx.GetVar(name); !exists {
		value, exists = globalCtx.GetVar(name)
	}
	return
}

func GetFuncInfo(ctx ExprContext, name string) (item ExprFunc, exists bool, ownerCtx ExprContext) {
	if item, exists = ctx.GetFuncInfo(name); exists {
		ownerCtx = ctx
	} else if item, exists = globalCtx.GetFuncInfo(name); exists {
		ownerCtx = globalCtx
	}
	return
}

func init() {
	globalCtx = NewSimpleStore()
	ImportBuiltinsFuncs(globalCtx)
}