package us.parr.bookish.entity;

import org.antlr.v4.runtime.ParserRuleContext;
import org.antlr.v4.runtime.Token;

import java.util.Map;

import static us.parr.lib.ParrtStrings.expandTabs;

public abstract class ExecutableCodeDef extends EntityDef {
	public ParserRuleContext tree;

	public String code;
	public String displayExpr;
	public String inputFilename;
	public SectionDef enclosingSection;
	public ChapterDef enclosingChapter;

	public boolean isCodeVisible = true;
	public boolean isOutputVisible = true;

	public Map<String,String> attributes;

	public ExecutableCodeDef(ParserRuleContext tree,
	                         String inputFilename,
	                         int index,
	                         Token startOrRefToken,
	                         Map<String,String> attributes,
	                         String code)
	{
		super(index, startOrRefToken);
		this.tree = tree;
		this.inputFilename = inputFilename;
		this.code = expandTabs(code, 4);
		this.attributes = attributes;
		if ( attributes!=null ) {
			this.label = attributes.get("label");
			if ( attributes.containsKey("hide") ) {
				isCodeVisible = !attributes.get("hide").equals("true");
			}
			if ( attributes.containsKey("output") ) {
				displayExpr = attributes.get("output");
			}
		}
	}
}