import { immutable } from '../../decorators';
import { ExpressionNode, LOGIC_TYPE } from '../LogicItem';
import { BuiltInFuncParam } from './BuiltInFuncParam';

/**
 * 内置函数
 * @TODO: 当前类目前主要用于生成文档
 */
export class BuiltInFunction extends ExpressionNode {
    /**
     * 逻辑节点类型
     */
    @immutable()
    public readonly type: LOGIC_TYPE = LOGIC_TYPE.BuiltInFunction;
    /**
     * 调用名称
     */
     @immutable()
     public readonly calleeCode: string = undefined;
    /**
     * 跳转页面参数
     */
    @immutable()
    public readonly params: Array<BuiltInFuncParam> = [];
    /**
     * 生成 JS 脚本
     */
    toScript() {
        const params = this.params.map((param) => param.toScript());

        let paramsCode = params.join(',');
        if (paramsCode === ',')
            paramsCode = '';
        else
            paramsCode = params.join(',');

        return `${this.calleeCode}(${paramsCode})`.replace(/"/g, "'");
    }
}
