package GlobalData.Tasks;
import Common.Current;
import Common.UI.StatusEnum;
import Common.UI.Themes.VisualiserFonts;

import java.awt.*;
public enum TaskState implements StatusEnum {
    Inactive,
    //--
    Waiting,
    WorkspaceCreated,
    WorkspaceReady,
    Running,
    Canceled,
    //--- определение без скачки результатов!
    ResultsDownloaded,
    //-----------------------
    Finished,
    //--- результирующие
    DoneWithErrors,
    AbortedByTimeout,
    AbortedByUser,
    Crushed,
    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:
                return true;
            default:
                return false;
        }
    }
    public String getDescription() {
        switch (this) {
            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 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 Font getFont() {
        switch (this) {
            case FailedToQueue:
            case NoSuchTask:
            case AbortedByUser:
            case AbortedByTimeout:
            case DoneWithErrors:
            case WrongTestFormat:
            case InternalError:
            case Canceled:
                return Current.getTheme().Fonts.get(VisualiserFonts.BadState);
            case Queued:
            case Running:
                return Current.getTheme().Fonts.get(VisualiserFonts.ProgressState);
            case Done:
                return Current.getTheme().Fonts.get(VisualiserFonts.GoodState);
            case Crushed:
                return Current.getTheme().Fonts.get(VisualiserFonts.Fatal);
            case Finished:
                return Current.getTheme().Fonts.get(VisualiserFonts.BlueState);
            case WorkspaceReady:
                return Current.getTheme().Fonts.get(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 DoneWithErrors:
            case AbortedByTimeout:
            case AbortedByUser:
            case WrongTestFormat:
            case Crushed:
            case InternalError:
            case Canceled:
                return true;
            default:
                return false;
        }
    }
}
