package _VisualDVM.Passes.All;
import Common.Passes.Pass;
import Common.Utils.Utils_;
import Common.Visual.UI;
import _VisualDVM.Global;
import _VisualDVM.Passes.PassCode;
import _VisualDVM.Passes.Server.TestingServerPass;
import _VisualDVM.Repository.Server.ServerCode;
import _VisualDVM.TestingSystem.Common.Group.Group;
import _VisualDVM.TestingSystem.Common.Test.Test;

import java.io.File;
import java.util.Vector;
public abstract class PublishTests extends TestingServerPass<Vector<Test>> {
    protected Group group;
    //----
    @Override
    public String getButtonText() {
        return "";
    }
    @Override
    public String getIconPath() {
        return "/icons/AddFile.png";
    }
    @Override
    protected void performFinish() throws Exception {
        super.performFinish();
        Global.mainModule.getPass(PassCode.SynchronizeTests).Do();
    }
    @Override
    protected void FocusResult() {
        Global.mainModule.getUI().getMainWindow().FocusTests();
    }
    //--
    protected abstract PassCode getCreateTestCode();
    protected String getNoFilesMessage() {
        return "";
    }
    //--
    @Override
    protected boolean canStart(Object... args) throws Exception {
        Vector<File> files = (Vector<File>) args[0];
        group = (Group) args[1];
        target = new Vector<>();
        //---------------------
        if (files.isEmpty()) {
            Log.Writeln_("Не найдено " + getNoFilesMessage() + " для формирования тестов.");
            return false;
        }
        //---
        Pass createTestPass = Global.mainModule.getPass(getCreateTestCode());
        //---
        for (File file : files) {
            if (createTestPass.Do(file, group))
                target.add((Test) createTestPass.target);
        }
        //---
        if (target.isEmpty()) {
            Log.Writeln_("Не удалось создать ни одного теста.");
            return false;
        }
        //---
        return UI.Question("В группу " + Utils_.Brackets(group.description) +
                "\nбудет добавлено " + target.size() + " тестов.\nПродолжить") &&
                SendRequest(ServerCode.PublishObjects, null, target);
    }
}
