package _VisualDVM.TestingSystem.Common;
import Common.Visual.Fonts.VisualiserFonts;
import Common.Visual.StatusEnum;

import java.util.Arrays;
import java.util.Vector;
import java.util.stream.Collectors;
public enum TasksPackageState implements StatusEnum {
    Draft,
    //--
    Inactive, //пакет просто есть. не запущен.
    Queued,
    Paused,
    //--
    TestsSynchronize, //оставить.
    PackageWorkspaceCreation,
    PackageStart,
    //
    CompilationWorkspacesCreation,
    CompilationPreparation,
    CompilationExecution,
    //-
    RunningWorkspacesCreation,
    RunningPreparation,
    RunningExecution,
    //--
    RunningEnd, //скачка архива
    Analysis,
    //-
    Done,
    Aborted,
    ConnectionError,
    DoneWithErrors;
    public boolean isActive() {
        switch (this) {
            case Inactive:
            case Done:
            case DoneWithErrors:
            case Aborted:
            case Draft:
            case ConnectionError:
                return false;
            default:
                return true;
        }
    }
    public boolean isDone() {
        switch (this) {
            case Done:
            case DoneWithErrors:
                return true;
            default:
                return false;
        }
    }
    @Override
    public VisualiserFonts getFont() {
        switch (this) {
            case TestsSynchronize:
            case Analysis:
            case Draft:
            case Paused:
                return VisualiserFonts.BlueState;
            case CompilationExecution:
            case RunningExecution:
                return VisualiserFonts.ProgressState;
            case Done:
                return VisualiserFonts.GoodState;
            case DoneWithErrors:
                return VisualiserFonts.BadState;
            default:
                return StatusEnum.super.getFont();
        }
    }
    //-
    public String getDescription() {
        switch (this) {
            case Inactive:
                return "неактивен";
            case Draft:
                return "Подготовка к публикации";
            case Aborted:
                return "прерван";
            case Queued:
                return "в очереди";
            case TestsSynchronize:
                return "синхронизация тестов";
            case PackageWorkspaceCreation:
                return "создание рабочей папки пакета";
            case PackageStart:
                return "старт пакета";
            case CompilationWorkspacesCreation:
                return "создание рабочих папок компиляции";
            case CompilationPreparation:
                return "подготовка к компиляции";
            case CompilationExecution:
                return "компиляция";
            case RunningWorkspacesCreation:
                return "создание рабочих папок для запуска";
            case RunningPreparation:
                return "подготовка к запуску";
            case RunningExecution:
                return "запуск";
            case RunningEnd:
                return "загрузка результатов";
            case Analysis:
                return "анализ результатов";
            case Done:
                return "завершен";
            case ConnectionError:
                return "сбой связи";
            case DoneWithErrors:
                return "завершен с ошибками";
            case Paused:
                return "пауза";
            default:
                return StatusEnum.super.getDescription();
        }
    }
    public Vector<TasksPackageState> getHigherStates() {
        return Arrays.stream(values()).filter(state -> state.ordinal() > this.ordinal()).collect(Collectors.toCollection(Vector::new));
    }
}
