#!/usr/bin/env bash

if [ $# -lt 2 ]; then
	echo >&2 "Usage: $(basename "${0}") <module-name> <func-name>..."
	exit 1
fi

MODULE_NAME=${1,,}
GO_FILE="func-${MODULE_NAME//[-.]/_}.go"

shift
FUNC_LIST=
i=0
for name; do
	if [ ${i} -gt 0 ]; then
		if [ $((i+1)) -eq $# ]; then
			FUNC_LIST+=" and "
		else
			FUNC_LIST+=", "
		fi
	fi
	FUNC_LIST+="${name}()"
	((i++))
done

cat > "${GO_FILE}" <<EOF
// Copyright (c) 2024 Celestino Amoroso (celestino.amoroso@gmail.com).
// All rights reserved.

// func-${MODULE_NAME}.go
package expr

import (
)


// --- Start of function definitions

$(
for name; do
	cat <<IEOF
func ${name}Func(ctx ExprContext, name string, args []any) (result any, err error) {
        return
}

IEOF

done
)

// --- End of function definitions

// Import above functions in the context
func Import${MODULE_NAME^}Funcs(ctx ExprContext) {
$(
for name; do
        cat <<IEOF
        ctx.RegisterFunc("${name}", &simpleFunctor{f: ${name}Func}, 1, -1)
IEOF

done
)
}

// Register the import function in the import-register.
// That will allow to import all function of this module by the "builtin" operator."
func init() {
	registerImport("${MODULE_NAME}", Import${name}Funcs, "The \"${MODULE_NAME}\" module implements the ${FUNC_LIST} function(s)")
}
EOF

