package _VisualDVM.Passes.Sapfor;
import Common.Passes.Pass;
import Common.Utils.Utils_;
import _VisualDVM.Current;
import _VisualDVM.Global;
import _VisualDVM.Passes.PassCode;
import _VisualDVM.TestingSystem.SAPFOR.Json.SapforVersion_json;
import _VisualDVM.TestingSystem.SAPFOR.SapforTask.SapforTask;

import java.io.File;
public abstract class OpenSapforVersionPass extends Pass<SapforVersion_json> {
    @Override
    public String getIconPath() {
        return "/icons/OpenProject.png";
    }
    @Override
    public String getButtonText() {
        return "";
    }
    public abstract Current getCurrentName();
    @Override
    protected boolean needsAnimation() {
        return true;
    }
    @Override
    protected boolean canStart(Object... args) throws Exception {
        if (Global.mainModule.Check(Log, getCurrentName())) {
            target = (SapforVersion_json) Global.mainModule.get(getCurrentName());
            return true;
        }
        return false;
    }
    @Override
    protected void body() throws Exception {
        SapforTask task = target.task;
        ShowMessage1("Построение дерева версий и создание баз данных...");
        File rootHome = new File(Global.visualiser.getDownloadsDirectory(), Utils_.getDateName(task.test_description));
        for (SapforVersion_json version_json : task.versions) {
            ShowMessage2(version_json.version);
            version_json.createProject(rootHome);
        }
        for (SapforVersion_json version_json : task.variants) {
            ShowMessage2(version_json.version);
            version_json.createProject(rootHome);
        }
        //-второй проход это запись логов и сообщений. у вариантов их быть не может.
        ShowMessage1("Прочтение журналов и сообщений..."); //без версий нельзя, иначе лишние файлы захватит.
        for (SapforVersion_json version_json : task.versions) {
            ShowMessage2(version_json.version);
            version_json.ReadMessages();
        }
    }
    @Override
    protected void performDone() throws Exception {
        Global.mainModule.getPass(PassCode.OpenCurrentProject).Do(target.project.Home);
    }
}
