package _VisualDVM.TestingSystem.SAPFOR.SapforConfiguration;
import _VisualDVM.ServerObjectsCache.SapforConfigurationCache;
import _VisualDVM.ServerObjectsCache.VisualCaches;
import Common.Utils.TextLog;
import _VisualDVM.ProjectData.LanguageName;
import _VisualDVM.TestingSystem.Common.Configuration.Configuration;
import _VisualDVM.TestingSystem.Common.Group.Group;
import _VisualDVM.TestingSystem.SAPFOR.SapforSettings.SapforSettings;

import java.util.Vector;
public class SapforConfiguration extends Configuration {
    public SapforConfiguration(SapforConfiguration sapforConfiguration) {
        this.SynchronizeFields(sapforConfiguration);
    }
    public SapforConfiguration() {
    }
    @Override
    public boolean validate(TextLog Log) {
        SapforConfigurationCache cache = (SapforConfigurationCache) VisualCaches.GetCache(this);
        //--
        Vector<Group> groups = cache.getGroups();
        Vector<SapforSettings> settingsArray= cache.getSettings();
        //--
        Vector<LanguageName> groupsLanguages = new Vector<>();
        for (Group group : groups) {
            if (!groupsLanguages.contains(group.language))
                groupsLanguages.add(group.language);
        }
        //---
        //1. проверка цепочек команд на корректность
        for (SapforSettings sapforSettings: settingsArray){
            sapforSettings.validate(Log);
        }
        //2. Проверка входящих групп на единственный язык фортран
        if (groupsLanguages.size()>1){
            Log.Writeln_("Запуск тестов на разных языках в рамках одного пакета запрещен!\n");
        }
        if ((!groupsLanguages.contains(LanguageName.fortran))) {
            Log.Writeln_("Поддерживается пакетный режим только для языка Fortran");
        }
        //-
        return Log.isEmpty();
    }
}
