package io.github.vmzakharov.ecdataframe.dsl;

import io.github.vmzakharov.ecdataframe.dataset.AvroDataSet;
import io.github.vmzakharov.ecdataframe.dsl.value.Value;
import org.eclipse.collections.api.RichIterable;
import org.eclipse.collections.api.map.MapIterable;
import org.eclipse.collections.api.map.MutableMap;

public interface EvalContext
{
    Value setVariable(String newVarName, Value newValue);

    Value getVariable(String newVariableName);

    Value getVariableOrDefault(String newVariableName, Value defaultValue);

    boolean hasVariable(String variableName);

    void removeVariable(String variableName);

    MapIterable<String, FunctionScript> getDeclaredFunctions();

    void setDeclaredFunctions(MutableMap<String, FunctionScript> newDeclaredFunctions);

    FunctionScript getDeclaredFunction(String functionName);

    void addDataSet(AvroDataSet dataSet);

    AvroDataSet getDataSet(String dataSetName);

    RichIterable<String> getVariableNames();

    void removeAllVariables();
}