package net.northking.cctp.se.script.core;


import net.northking.cctp.se.script.bean.Script;

import java.util.Map;

/**
 * 脚本执行器以及运行时上下文
 */
public interface ScriptExecutor extends IScriptRuntimeContext{
    /**
     * 脚本运行标识：任务ID或者调试会话ID
     * @return
     */
    String getRuntimeIdentifier();
    /**
     * 初始化数据
     */
    void initData(Map<String,Object> data);
    /**
     * 运行脚本
     * @param script
     */
    ScriptExecuteResult runScript(Script script, ScriptExecuteResult ret);

    /**
     * 初始化脚本信息
     * @param script
     */
    void init(Script script);
    /**
     * 重置
     */
    void reset(Script script);
    /**
     * 添加脚本运行监听器
     */
    void setRuntimeListener(ScriptRuntimeListener listener);

    /**
     * 从制定步骤开始回放
     * @param script
     * @param scriptStepId
     * @return
     */
    ScriptExecuteResult runStep(Script script, String scriptStepId, String replayType);

    /**
     * 单步执行
     * @param script
     * @param scriptStepId
     * @return
     */
    ScriptExecuteResult runStep(Script script, String scriptStepId, boolean oneStepFlag, String replayType);

    /**
     * 设置请求标志id
     * @param requestId
     */
    void setRequestId(String requestId);

    /**
     * 清理临时资源文件
     */
    void clearResource();

    /**
     *
     * @param ignoreError
     */
    void setIgnoreError(boolean ignoreError);

    /**
     * 设置脚本数据
     * @param script
     */
    void setScript(Script script);

    /**
     * 设置任务Id
     * @param taskId 任务Id
     */
    void setCurrentTaskId(String taskId);

    /**
     * 设置项目id
     * @param projectId 项目id
     */
    void setProjectId(String projectId);

    /**
     * 获取项目id
     */
    String getProjectId();
}
