package _VisualDVM;
import Common.CommonConstants;
import _VisualDVM.ComponentsServer.UserAccount.UserAccount;
import _VisualDVM.Passes.PassCode;
import com.google.gson.annotations.Expose;

import javax.swing.*;
import java.io.File;
public class NormalProperties extends VisualDVMProperties {
    //--->
    @Expose
    public String Email = "";
    @Expose
    public String Name = "";
    @Expose
    public String ServerUserPassword = "";
    @Expose
    public boolean OfferRegistrationOnStart = true;
    //--->
    @Expose
    public String Workspace = ""; // место хранения проектов, и загруженных проектов
    @Expose
    public String ProjectsSearchDirectory = ""; //место последнего открытия проектов
    @Expose
    public String DocumentsDirectory = ""; //место сохранения документов,например скрина графа функций или Excel
    @Expose
    public String VisualiserPath = ""; //места ручной установки компонентов. ( мб объединить с documents directory?)
    @Expose
    public String Sapfor_FPath = "";
    @Expose
    public String Visualizer_2Path = "";
    @Expose
    public String InstructionPath = "";
    @Expose
    public String PerformanceAnalyzerPath = "";
    //---
    @Expose
    public boolean AutoBugReportsLoad = true;
    @Expose
    public boolean AutoTestsLoad = true;
    @Expose
    public boolean ConfirmPassesStart = true;
    @Expose
    public boolean ShowPassesDone = true;
    @Expose
    public boolean FocusPassesResult = true;
    //--
    @Expose
    public boolean collapseCredentials = false;
    @Expose
    public boolean collapseFileGraphs = false;
    @Expose
    public boolean collapseFileMessages = false;
    @Expose
    public boolean collapseProjectTrees = false;
    //--
    @Expose
    public int EditorFontSize = 14;
    @Expose
    public int ComponentsWindowWidth = 650;
    @Expose
    public int ComponentsWindowHeight = 250;
    //--
    @Expose
    public int Kernels = Utils.getHalfKernels();
    @Expose
    public String LocalMakePathWindows = "C:\\MinGW\\msys\\1.0\\bin\\make.exe";
    @Expose
    public String PrecompilationFlags = "";
    //--тестирование
    @Expose
    public int CheckTestingIntervalSeconds = 10; //интервал автопроверки тестирования
    @Expose
    public boolean AutoCheckTesting = false; // проверять ли задачи тестирования при включенном визуализаторе.
    @Expose
    public boolean EmailOnTestingProgress = false; //включено ли оповещение по email о результатах тестирования.
    @Expose
    public boolean CompleteCompilationOptions = true;
    @Expose
    public boolean CompleteRunEnvironments = true;
    @Expose
    public boolean CreateEthalonTasks = true;
    @Expose
    public boolean ErasePackageWorkspace = true;
    //--
    @Expose
    public int lastMachineId = CommonConstants.Nan;
    @Expose
    public int lastUserId = CommonConstants.Nan;
    @Expose
    public int lastCompilerId = CommonConstants.Nan;
    //-- сравнение
    @Expose
    public boolean RegisterOn = false;
    @Expose
    public boolean SpacesOn = false;
    @Expose
    public boolean EmptyLinesOn = false;
    @Expose
    public boolean FortranWrapsOn = false;
    @Expose
    public boolean ExtensionsOn = false;
    @Expose
    public boolean ComparsionDiffMergeOn = false;
    //компактность--
    @Expose
    public boolean ShowFullArraysDeclarations = false;
    @Expose
    public boolean ShowFullTabsNames = true;
    @Expose
    public boolean SmallScreen = false;
    @Expose
    public int BugReportsAgeLimit = 2;
    @Expose
    public int FastAccessPassesCount = 10;
    @Expose
    public int LastOpenedProjectsCount = 10;
    //--
    public NormalProperties() {
        Mode = _VisualDVM.Mode.Normal;
    }
    public NormalProperties(File file_in) {
        super(_VisualDVM.Mode.Normal, file_in);
    }
    @Override
    public String getFieldDescription(String fieldName) {
        switch (fieldName) {
            case "PrecompilationFlags":
                return "Опции предварительной компиляции";
            case "ErasePackageWorkspace":
                return "Очистка рабочего пространства пакета на целевой машине";
            case "CompleteCompilationOptions":
                return "Дополнение опций компиляции";
            case "CompleteRunEnvironments":
                return "Дополнение переменных окружения запуска";
            case "CreateEthalonTasks":
                return "Создание эталонных последовательных запусков";
            case "OfferRegistrationOnStart":
                return "Проверка регистрации";
            case "Email":
                return "Адрес электронной почты";
            case "Kernels":
                return "Число ядер при компиляции";
            case "LocalMakePathWindows":
                return "Путь к make.exe";
            case "SmallScreen":
                return "Маленький экран";
            case "ShowFullTabsNames":
                return "Показывать полные имена вкладок";
            case "ShowFullArraysDeclarations":
                return "Показывать развернутый список объявлений массивов";
            case "LastOpenedProjectsCount":
                return "Число отображаемых последних открытых проектов";
            case "FastAccessPassesCount":
                return "Число проходов на панели быстрого доступа";
            case "Workspace":
                return "Рабочее пространство визуализатора";
            case "BugReportsAgeLimit":
                return "Срок хранения отчетов об ошибках (месяцы)";
            case "ExtensionsOn":
                return "Учитывать расширения файлов";
            case "FortranWrapsOn":
                return "Учитывать переносы";
            case "EmptyLinesOn":
                return "Учитывать пустые строки";
            case "SpacesOn":
                return "Учитывать пробелы и табуляции";
            case "RegisterOn":
                return "Учитывать регистр";
            case "ComparsionDiffMergeOn":
                return "Автоматическое сравнение";
            case "AutoBugReportsLoad":
                return "Автоматическая синхронизация отчётов об ошибках";
            case "AutoTestsLoad":
                return "Автоматическая синхронизация системы тестирования";
            case "ShowPassesDone":
                return "Сообщать об успешном выполнении проходов";
            case "ConfirmPassesStart":
                return "Запрашивать подтверждения начала выполнения проходов";
            case "FocusPassesResult":
                return "Переходить на результирующую вкладку проходов по их завершении";
            case "collapseCredentials":
                return "Свернуть раздел машин";
            case "collapseFileGraphs":
                return "Свернуть раздел графов файла";
            case "collapseFileMessages":
                return "Свернуть раздел сообщений файла";
            case "collapseProjectTrees":
                return "Свернуть раздел деревьев проекта";
            default:
                return "?";
        }
    }
    @Override
    public boolean controlAction(String fieldName, JMenuItem control) {
        return (Global.mainModule.getPass(PassCode.UpdateProperty).Do(fieldName));
    }
    public void SynchronizeAccount(UserAccount account) {
        Name = account.name;
        Email = account.email;
        Update();
    }
}
