package org.swellrt.beta.client.operation.impl;

import org.swellrt.beta.client.ServiceContext;
import org.swellrt.beta.client.operation.HTTPOperation;
import org.swellrt.beta.client.operation.Operation;
import org.swellrt.beta.common.SException;

import jsinterop.annotations.JsProperty;
import jsinterop.annotations.JsType;

public final class LogoutOperation extends HTTPOperation<LogoutOperation.Options, LogoutOperation.Response> {

  @JsType(isNative = true)
  public interface Options extends Operation.Options {

    @JsProperty
    public String getId();

  }

  @JsType(isNative = true)
  public interface Response extends Operation.Response {


  }


  public LogoutOperation(ServiceContext context) {
    super(context);
  }


  @Override
  protected void onError(Throwable exception, Callback<Response> callback) {
    if (callback != null)
      callback.onError(new SException(SException.OPERATION_EXCEPTION, exception));
  }

  @Override
  protected void onSuccess(int statusCode, String data, Callback<Response> callback) {
    if (callback != null)
      callback.onSuccess(new Response(){
      });
  }


  @Override
  public void execute(Options options, Callback<Response> callback) {

    addPathElement("auth");

    if (getServiceContext().isSession()) {
        if (options.getId() == null ||
            (options.getId() != null && options.getId().equals(getServiceContext().getParticipantId()))) {
        // get the current participant id before reseting the context!
        addPathElement(getServiceContext().getParticipantId());
          getServiceContext().reset();
        }
    } else if (options.getId() != null) {
      addPathElement(options.getId());
    } else {
      callback.onError(new SException(1, null, "Missing user parameter"));
      return;
    }

    executeDelete(callback);
  }



}

@@ -654,16 +654,56 @@
 %0A%0A%0A  %7D%0A%0A
+  private boolean resetContext = false;%0A
 %0A  publi
@@ -1066,32 +1066,148 @@
 se%3E callback) %7B%0A
+%0A    // reset the context after http call to send cookies%0A    if (resetContext)%0A      getServiceContext().reset();%0A%0A
     if (callback
@@ -1578,79 +1578,8 @@
 ) %7B%0A
-        // get the current participant id before reseting the context!%0A
     
@@ -1650,37 +1650,27 @@
     
-  getServiceContext().reset()
+resetContext = true
 ;%0A  

Fix logout logic