package Visual_DVM_2021.Passes.All;
import Common.Current_;
import Common.Utils.Utils_;
import _VisualDVM.Current;
import _VisualDVM.Global;
import _VisualDVM.Visual.UI;
import Common.Visual.Windows.Dialog.Text.ComboTextDialog;
import _VisualDVM.ProjectData.SapforData.Functions.FuncInfo;
import Visual_DVM_2021.Passes.PassCode;
import Common.Passes.Pass;

import java.util.Comparator;
import java.util.Vector;
public class ApplyCurrentFunction extends Pass {
    @Override
    public String getIconPath() {
        return "/icons/Apply.png";
    }
    @Override
    public String getButtonText() {
        return "";
    }
    @Override
    protected boolean canStart(Object... args) throws Exception {
        if ( Global.mainModule.getPass(PassCode.SPF_GetGraphFunctions).isDone()) {
            ComboTextDialog ff = new ComboTextDialog();
            Vector<String> names = new Vector<>(Global.mainModule.getProject().allFunctions.keySet());
            names.sort(Comparator.naturalOrder());
            if (ff.ShowDialog("Выберите имя текущей процедуры", names)) {
                String func_name = ff.Result;
                if (Global.mainModule.getProject().allFunctions.containsKey(func_name)) {
                    FuncInfo fi = Global.mainModule.getProject().allFunctions.get(func_name);
                    Global.mainModule.set(Current.Function, fi);
                    return true;
                } else {
                    Log.Writeln_("Проект не содержит процедуры с именем " + Utils_.Brackets(func_name));
                }
            }
        }
        return false;
    }
    @Override
    protected void showDone() throws Exception {
        UI.getMainWindow().getProjectWindow().getFunctionsWindow().ShowCurrentFunction();
        if (SPF_GetGraphFunctionPositions.showByCurrentFunction) {
            Global.mainModule.getPass(PassCode.SPF_GetGraphFunctionPositions).Do();
        }
    }
}
