package Visual_DVM_2021.Passes.All;
import Common.Utils.Utils_;
import _VisualDVM.Constants;
import _VisualDVM.Current;
import Common.Visual.Windows.Dialog.VDirectoryChooser;
import _VisualDVM.Global;
import _VisualDVM.Utils;
import _VisualDVM.GlobalData.Settings.SettingName;
import Visual_DVM_2021.Passes.PassCode;
import Common.Passes.Pass;

import java.io.File;
import java.util.Arrays;
import java.util.Vector;
public class CreateGroupFromDirectory extends PublishTests {
    VDirectoryChooser directoryChooser = new VDirectoryChooser("Выбор домашней папки группы");
    @Override
    public String getIconPath() {
        return "/icons/OpenProject.png";
    }
    @Override
    protected PassCode getCreateTestCode() {
        return PassCode.CreateTestFromDirectory;
    }
    @Override
    protected String getNoFilesMessage() {
        return "ни одной папки";
    }
    @Override
    protected boolean canStart(Object... args) throws Exception {
        Utils.RestoreSelectedDirectory(directoryChooser);
        File dir = directoryChooser.ShowDialog();
        if (dir == null) {
            Log.Writeln_("Папка не выбрана");
            return false;
        }
        //---------------
        if (!dir.isDirectory()) {
            Log.Writeln_(Utils_.Brackets(dir) + "\nне является папкой!");
            return false;
        }
        if (dir.getName().equals(Constants.data)) {
            Log.Writeln_(Utils_.Brackets(dir) + "\nявляется служебной папкой визуализатора!");
            return false;
        }
        if (!Utils.validateProjectFile(dir, Log)) {
            Log.Writeln_("Имя папки " + Utils_.Brackets(dir.getName())
                    + " содержит запрещённые символы " +
                    Utils_.printAllForbiddenCharacters() + ", или кириллицу.");
            return false;
        }
        //--
        File[] files_ = dir.listFiles(File::isDirectory);
        if (files_ == null) {
            Log.Writeln_("Ошибка при получении списка подпапок");
            return false;
        }
        if (files_.length == 0) {
            Log.Writeln_("В выбранной папке не найдено ни одной папки");
            return false;
        }
        if ( Global.mainModule.getPass(PassCode.PublishGroup).Do(dir.getName().toUpperCase())) {
            group = Global.mainModule.getGroup();
        } else return false;
        //---------------
        Vector<File> files = new Vector<>(Arrays.asList(files_));
        Global.mainModule.getPass(PassCode.UpdateSetting).Do(SettingName.ProjectsSearchDirectory, directoryChooser.getCurrentDirectory());
        return super.canStart(files, group);
    }
}
