package interpreter

import (
	"strings"

	"github.com/zeevdiukman/go-interpreter"
)

type Interp struct {
	*interpreter.Interpreter
}

func New() *Interp {
	interp := &Interp{interpreter.New()}

	return interp
}
func (interp *Interp) PathAction(rules string, fn func(fn interpreter.Function)) {
	name := "router_rules"

	regx := interp.Regex(name, "\\(`(.*?)`\\)")
	interp.Func(name, func(args ...any) string {
		// argsStmntName := args[0].(string)
		argsPathAction := args[0].(func(string))
		interp.AddStatment(name, rules).SplitStatementByRegex(regx)
		interp.Statments.ForEach(func(stmnt *interpreter.Statment) {
			if stmnt.Name == name {
				for idx, splitVal := range stmnt.RegexSplit {
					splitVal, _ = strings.CutPrefix(splitVal, ".")
					switch splitVal {
					case "Path":
						{
							path := stmnt.RegexSplit[idx+1]
							argsPathAction(path)
						}
					}
				}
			}
		})
		return ""
	})
	interp.Funcs[name].Function()
}
