package TestingSystem.SAPFOR.SapforConfiguration;
import Common.Database.DBObject;
import Common.Database.riDBObject;
import Common.Global;
import TestingSystem.SAPFOR.SapforConfigurationCommand.SapforConfigurationCommand;
import Visual_DVM_2021.Passes.PassCode_2021;

import java.util.Vector;
public class SapforConfiguration extends riDBObject {
    //настройки.
    public int maxtime = 300; //лимит времени преобразования. (пока не используется)
    public int FREE_FORM = 0; //"Свободный выходной стиль"; -f90
    public int STATIC_SHADOW_ANALYSIS = 0;//"Оптимизация теневых обменов"; -sh
    public int MAX_SHADOW_WIDTH = 50; // "Максимальный размер теневых граней"; (%) -shwidth значение поля
    public int KEEP_SPF_DIRECTIVES = 0; //"Сохранять SPF директивы при построении параллельных вариантов"; -keepSPF
    public int KEEP_DVM_DIRECTIVES = 0;// "Учитывать DVM директивы"; -keepDVM
    //----
    public String getFlags() {
        Vector<String> res = new Vector<>();
        if (FREE_FORM > 0)
            res.add("-f90");
        if (STATIC_SHADOW_ANALYSIS > 0)
            res.add("-sh");
        if (MAX_SHADOW_WIDTH > 0)
            res.add("-shwidth " + MAX_SHADOW_WIDTH);
        if (KEEP_DVM_DIRECTIVES > 0)
            res.add("-keepDVM");
        if (KEEP_SPF_DIRECTIVES > 0)
            res.add("-keepSPF");
        return String.join(" ", res);
    }
    //-
    public Vector<PassCode_2021> getPassCodes() {
        Vector<PassCode_2021> res = new Vector<>();
        for (SapforConfigurationCommand command : Global.testingServer.db.sapforConfigurationCommands.Data.values()) {
            if (command.sapforconfiguration_id == id) {
                res.add(command.passCode);
            }
        }
        return res;
    }
    //--
    @Override
    public void SynchronizeFields(DBObject src) {
        super.SynchronizeFields(src);
        SapforConfiguration c = (SapforConfiguration) src;
        maxtime = c.maxtime;
        FREE_FORM = c.FREE_FORM;
        STATIC_SHADOW_ANALYSIS = c.STATIC_SHADOW_ANALYSIS;
        MAX_SHADOW_WIDTH = c.MAX_SHADOW_WIDTH;
        KEEP_SPF_DIRECTIVES = c.KEEP_SPF_DIRECTIVES;
        KEEP_DVM_DIRECTIVES = c.KEEP_DVM_DIRECTIVES;
    }
    public SapforConfiguration(SapforConfiguration sapforConfiguration) {
        this.SynchronizeFields(sapforConfiguration);
    }
    public SapforConfiguration() {
    }
}
