package _VisualDVM.GlobalData.Tasks;
import Common.Visual.Fonts.VisualiserFonts;
import Common.Visual.StatusEnum;
public enum TaskState implements StatusEnum {
    Inactive,
    //--
    Waiting,
    WorkspaceCreated,
    WorkspaceReady,
    Running,
    Canceled,
    //--- определение без скачки результатов!
    ResultsDownloaded,
    //-----------------------
    Finished,
    //--- результирующие
    Crushed,
    NaN,
    DoneWithErrors,
    DoneWithDiffs,
    AbortedByTimeout,
    AbortedByUser,
    WrongTestFormat,
    InternalError,
    Done,
    //--- сугубо кластерные.
    Queued,
    NoSuchTask,
    FailedToQueue,
    AbortingByUser; //только для одиночного запуска
    //для фильтров тестирования двм системы.
    public boolean isVisible() {
        switch (this) {
            case Inactive:
            case Waiting:
            case Canceled:
            case Done:
            case DoneWithErrors:
            case AbortedByTimeout:
            case WrongTestFormat:
            case InternalError:
            case Crushed:
            case DoneWithDiffs:
            case NaN:
                return true;
            default:
                return false;
        }
    }
    public String getDescription() {
        switch (this) {
            case NaN:
                return "NaN";
            case Waiting:
                return "ожидание";
            case WorkspaceCreated:
                return "папка создана";
            case WorkspaceReady:
                return "готова к выполнению";
            case Running:
                return "выполняется";
            case Finished:
                return "ожидание анализа результатов";
            case Inactive:
                return "неактивно";
            case AbortedByTimeout:
                return "таймаут";
            case AbortedByUser:
                return "прервана";
            case Done:
                return "успешно";
            case DoneWithDiffs:
                return "различия";
            case DoneWithErrors:
                return "с ошибками";
            case Crushed:
                return "авост";
            case Canceled:
                return "отменена";
            case InternalError:
                return "отсутствует файл состояния";
            case WrongTestFormat:
                return "неверный формат";
            case FailedToQueue:
                return "не удалось поставить в очередь";
            case NoSuchTask:
                return "не существует";
            case Queued:
                return "в очереди";
            case AbortingByUser:
                return "прерывание...";
            case ResultsDownloaded:
                return "результаты загружены";
            //--------------------------------------->>>
            default:
                return StatusEnum.super.getDescription();
        }
    }
    @Override
    public VisualiserFonts getFont() {
        switch (this) {
            case FailedToQueue:
            case NoSuchTask:
            case AbortedByUser:
            case AbortedByTimeout:
            case DoneWithErrors:
            case WrongTestFormat:
            case InternalError:
            case Canceled:
            case DoneWithDiffs:
            case NaN:
                return VisualiserFonts.BadState;
            case Queued:
            case Running:
                return VisualiserFonts.ProgressState;
            case Done:
                return VisualiserFonts.GoodState;
            case Crushed:
                return VisualiserFonts.Fatal;
            case Finished:
                return VisualiserFonts.BlueState;
            case WorkspaceReady:
                return VisualiserFonts.ReadyState;
            default:
                return StatusEnum.super.getFont();
        }
    }
    //
    public boolean isActive() {
        switch (this) {
            case Waiting:
            case Running:
            case Queued:
            case Finished:
            case AbortingByUser:
            case WorkspaceReady:
            case WorkspaceCreated:
                return true;
            default:
                return false;
        }
    }
    public boolean isFinished() {
        return this == TaskState.Finished;
    }
    public boolean isComplete() {
        switch (this) {
            case Done:
            case DoneWithDiffs:
            case DoneWithErrors:
            case AbortedByTimeout:
            case AbortedByUser:
            case WrongTestFormat:
            case Crushed:
            case InternalError:
            case Canceled:
            case NaN:
                return true;
            default:
                return false;
        }
    }
}
