package com.l7tech.server.stepdebug;

import com.l7tech.objectmodel.Goid;
import com.l7tech.policy.assertion.AssertionStatus;
import com.l7tech.server.message.PolicyEnforcementContext;
import com.l7tech.util.Option;
import java.util.Collection;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

public interface DebugManager {
   @NotNull
   DebugContext createDebugContext(@NotNull Goid var1);

   @NotNull
   Option<String> startDebug(@NotNull String var1);

   void stopDebug(@NotNull String var1);

   void stepOver(@NotNull String var1, @NotNull Collection<Integer> var2);

   void stepInto(@NotNull String var1);

   void stepOut(@NotNull String var1, @NotNull Collection<Integer> var2);

   void resume(@NotNull String var1);

   void terminateDebug(@NotNull String var1);

   void toggleBreakpoint(@NotNull String var1, @NotNull Collection<Integer> var2);

   void removeAllBreakpoints(@NotNull String var1);

   void addUserContextVariable(@NotNull String var1, @NotNull String var2);

   void removeUserContextVariable(@NotNull String var1, @NotNull String var2);

   @Nullable
   DebugContext getDebugContext(@NotNull String var1);

   void onMessageArrived(@NotNull PolicyEnforcementContext var1, @NotNull Goid var2);

   void onMessageFinished(@NotNull PolicyEnforcementContext var1, @Nullable AssertionStatus var2);
}
