package Visual_DVM_2021.Passes.All;
import Common.Current_;
import Common.Visual.UI_;
import _VisualDVM.Current;
import _VisualDVM.Global;
import _VisualDVM.GlobalData.Compiler.CompilerType;
import _VisualDVM.GlobalData.Machine.MachineType;
import _VisualDVM.GlobalData.User.UserState;
import _VisualDVM.TestingSystem.Common.TestingServer;
import _VisualDVM.TestingSystem.DVM.DVMConfiguration.DVMConfiguration;
import _VisualDVM.TestingSystem.DVM.DVMPackage.DVMPackage;
import Visual_DVM_2021.Passes.PassCode;
import Visual_DVM_2021.Passes.Server.PublishServerObject;

import java.util.Vector;
public class StartSelectedDVMConfigurations extends PublishServerObject<TestingServer, DVMPackage> {
    public StartSelectedDVMConfigurations() {
        super(Global.testingServer, DVMPackage.class);
    }
    @Override
    public String getIconPath() {
        return "/icons/Start.png";
    }
    //--
    @Override
    protected boolean canStart(Object... args) throws Exception {
        if (!Global.mainModule.getAccount().CheckRegistered(Log)) {
            return false;
        }
        if (!Global.mainModule.Check(Log, Current.Machine, Current.User, Current.Compiler))
            return false;
        if (!Global.mainModule.getMachine().type.equals(MachineType.Server)) {
            Log.Writeln_("Тестирование поддерживается только на одиночном удалённом сервере.");
            return false;
        }
        if (!Global.mainModule.getUser().state.equals(UserState.ready_to_work)) {
            Log.Writeln_("Пользователь не готов к работе. Выполните инициализацию пользователя!");
            return false;
        }
        if (!Global.mainModule.getCompiler().type.equals(CompilerType.dvm)) {
            Log.Writeln_("Тестирование поддерживается только для DVM компиляторов.");
            return false;
        }
        if (!Global.mainModule.getCompiler().versionLoaded)
            Global.mainModule.getPass(PassCode.ShowCompilerVersion).Do(Global.mainModule.getCompiler(), false);
        //-----
        Vector<DVMConfiguration> configurations = Global.testingServer.db.dvm_configurations.getCheckedOrCurrent();
        if (configurations.isEmpty()) {
            Log.Writeln_("Не отмечено ни одной конфигурации, или отсутствует текущая конфигурация.");
            return false;
        }
        //---
        target= new DVMPackage(
                Global.mainModule.getAccount(),
                Global.mainModule.getMachine(),
                Global.mainModule.getUser(),
                Global.mainModule.getCompiler(),
                configurations,
                Global.properties.EmailOnTestingProgress ? 1 : 0
                );
        //----
        if (target.tasksCount == 0) {
            Log.Writeln_("Задач не найдено.");
            return false;
        }
        return UI_.Question("Будет запущено " + target.tasksCount + " задач. Продолжить");
    }
}
