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

/**
 * 成员表达式
 * @TODO: 当前类目前主要用于生成文档
 */
export class MemberExpression extends ExpressionNode {
    /**
     * 逻辑节点类型
     */
    @immutable()
    public readonly type: LOGIC_TYPE = LOGIC_TYPE.MemberExpression;
    /**
     * 对象
     */
    @immutable()
    public readonly object: ExpressionNode = undefined;
    /**
     * 属性
     */
    @immutable()
    public readonly property: ExpressionNode = undefined;
    /**
     * 生成 JS 脚本
     */
    toScript() {
        if (String(this.property.type).endsWith('Literal'))
            return `${this.object.toScript()}[${this.property.toScript()}]`;
        else // 生成代码尽量简洁一些，目前属性没有特殊字符的情况
            return `${this.object.toScript()}.${this.property.toScript()}`;
    }
}
