package Visual_DVM_2021.Passes.All;
import Common.Constants;
import Common.Current;
import Common.Utils.Files.VDirectoryChooser;
import Common.Utils.Utils;
import GlobalData.Settings.SettingName;
import Visual_DVM_2021.Passes.PassCode_2021;
import Visual_DVM_2021.Passes.Pass_2021;

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_2021 getCreateTestCode() {
        return PassCode_2021.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()) + " содержит запрещённые символы " + Constants.all_forbidden_characters_string + ", или кириллицу.");
            return false;
        }
        //--
        File[] files_ = dir.listFiles(File::isDirectory);
        if (files_ == null) {
            Log.Writeln_("Ошибка при получении списка подпапок");
            return false;
        }
        if (files_.length == 0) {
            Log.Writeln_("В выбранной папке не найдено ни одной папки");
            return false;
        }
        if (passes.get(PassCode_2021.PublishGroup).Do(dir.getName().toUpperCase())) {
            group = Current.getGroup();
        } else return false;
        //---------------
        Vector<File> files = new Vector<>(Arrays.asList(files_));
        Pass_2021.passes.get(PassCode_2021.UpdateSetting).Do(SettingName.ProjectsSearchDirectory, directoryChooser.getCurrentDirectory());
        return super.canStart(files, group);
    }
}
