/*********************************************************************
* Copyright (c) 2019 The University of York.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
**********************************************************************/
package org.eclipse.epsilon.executors.ecl;

import java.io.File;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Optional;

import org.eclipse.epsilon.common.parse.problem.ParseProblem;
import org.eclipse.epsilon.ecl.EclModule;
import org.eclipse.epsilon.ecl.IEclModule;
import org.eclipse.epsilon.ecl.trace.MatchTrace;
import org.eclipse.epsilon.eol.exceptions.EolRuntimeException;
import org.eclipse.epsilon.eol.models.IModel;
import org.eclipse.epsilon.eol.types.IToolNativeTypeDelegate;
import org.eclipse.epsilon.erl.execute.RuleProfiler;
import org.eclipse.epsilon.executors.EpsilonLanguageExecutor;
import org.eclipse.epsilon.executors.ModuleWrap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * The ECL executor
 * @author Sina Madani
 * @since 1.6
 */
public class SimpleEclExecutor implements EpsilonLanguageExecutor<MatchTrace> {

	static final Logger logger = LoggerFactory.getLogger(SimpleEclExecutor.class);
	private final IEclModule module;
	private final ModuleWrap helper;
	
	public SimpleEclExecutor() {
		this(new EclModule());
	}
	
	public SimpleEclExecutor(IEclModule mdl) {
		logger.info("Creating the EclExecutor");
		module = mdl;
		helper = new ModuleWrap(module);
	}

	@Override
	public MatchTrace execute() throws EolRuntimeException {
		logger.info("Executing ECL module.");
        return module.execute();
	}

	public boolean parse(File file) throws Exception {
		return helper.parse(file);
	}

	public boolean parse(String code) throws Exception {
		return helper.parse(code);
	}

	public List<ParseProblem> getParseProblems() {
		return helper.getParseProblems();
	}

	public void addModels(Collection<IModel> models) {
		helper.addModels(models);
	}

	public void addParamters(Map<String, ?> parameters) {
		helper.addParamters(parameters);
	}

	public void addNativeTypeDelegates(Collection<IToolNativeTypeDelegate> nativeDelegates) {
		helper.addNativeTypeDelegates(nativeDelegates);
	}

	public Optional<RuleProfiler> getRuleProfiler() {
		return helper.getRuleProfiler();
	}

	public void disposeModelRepository() {
		helper.disposeModelRepository();
	}

	public void clearModelRepository() {
		helper.clearModelRepository();
	}

	public void dispose() {
		helper.dispose();
	}

	public void preProcess() {
		
	}

	public void postProcess() {
		
	}

}
