// Path: src/main/java/io/github/jklingsporn/vertx/push/AddHeadersStep.java
// public interface AddHeadersStep extends PushToDestinationStep{
// 
//     /**
//      * Add <code>headings</code> option.
//      * @param headings something like {"en": "English Title", "es": "Spanish Title"}
//      * @return a PushToDestinationStep
//      * @see <a href="https://documentation.onesignal.com/reference#section-content-language">Create notification</a>
//      */
//     PushToDestinationStep withHeadings(JsonObject headings);
// 
// }
// 
// Path: src/main/java/io/github/jklingsporn/vertx/push/PushClient.java
// public interface PushClient {
// 
//     /**
//      * @param vertx your Vertx instance
//      * @param appId your OneSignal AppId
//      * @param restApiKey your OneSignal API-Key
//      * @return a PushClient
//      * @deprecated Consider using PushClient#create(Vertx,PushClientOptions) instead
//      */
//     static PushClient create(Vertx vertx, String appId, String restApiKey){
//         return new OneSignalPushClient(vertx, new PushClientOptions().setAppId(appId).setRestApiKey(restApiKey));
//     }
// 
//     /**
//      * @param httpClient the HttpClient to use for calling the OneSignal-API.
//      * @param appId your OneSignal AppId
//      * @param restApiKey your OneSignal API-Key
//      * @return a PushClient
//      * @deprecated Consider using PushClient#create(HttpClient,PushClientOptions) instead
//      */
//     static PushClient create(HttpClient httpClient, String appId, String restApiKey){
//         return new OneSignalPushClient(httpClient, new PushClientOptions().setAppId(appId).setRestApiKey(restApiKey));
//     }
// 
//     /**
//      * @param httpClient the HttpClient to use for calling the OneSignal-API.
//      * @param pushClientOptions the options
//      * @return a PushClient
//      * @since 1.7
//      */
//     static PushClient create(HttpClient httpClient, PushClientOptions pushClientOptions){
//         return new OneSignalPushClient(httpClient, pushClientOptions);
//     }
// 
//     /**
//      * @param vertx your Vertx instance
//      * @param pushClientOptions the options
//      * @return a PushClient
//      * @since 1.7
//      */
//     static PushClient create(Vertx vertx, PushClientOptions pushClientOptions){
//         return new OneSignalPushClient(vertx, pushClientOptions);
//     }
// 
//     /**
//      * @param webClient the WebClient to use for calling the OneSignal-API.
//      * @param pushClientOptions the options
//      * @return a PushClient
//      * @since 2.1
//      */
//     static PushClient create(WebClient webClient, PushClientOptions pushClientOptions){
//         return new OneSignalPushClient(webClient, pushClientOptions);
//     }
// 
//     /**
//      * Creating a push request using the <code>template_id</code>.
//      * @param templateId the template that should be used.
//      * @return a AddHeadersStep
//      * @see <a href="https://documentation.onesignal.com/reference#section-content-language">Create notification</a>
//      */
//     AddHeadersStep withTemplate(String templateId);
// 
//     /**
//      * Creating a push request using the <code>contents</code> option.
//      * @param contents something like {"en": "English Message", "es": "Spanish Message"}
//      * @return a AddHeadersStep
//      * @see <a href="https://documentation.onesignal.com/reference#section-content-language">Create notification</a>
//      */
//     AddHeadersStep withContent(JsonObject contents);
// 
//     /**
//      * Send a raw push request and assembling parameters on your own. Warning: no plausibility checks are made.
//      * @return SendWithOptionsStep
//      */
//     SendWithOptionsStep raw();
// 
//     /**
//      * Cancel a notification of the given id.
//      * @param notificationId the id of the notification to cancel
//      * @param resultHandler the handler dealing with the result
//      * @since 2.2
//      */
//     void cancel(String notificationId, Handler<AsyncResult<JsonObject>> resultHandler);
// 
// 
// }
// 
// Path: src/main/java/io/github/jklingsporn/vertx/push/SendWithOptionsStep.java
// public interface SendWithOptionsStep extends SendStep{
// 
//     /**
//      * Specify further options. Some common options are directly included in the <code>SendOptions</code> class others
//      * can be manually added using the <code>SendOptions#addCustom</code>-method.<br>
//      * <b>Example:</b> <code>new SendOptions().setPlatform(EnumSet.of(SendOptions.Platform.AMAZON, SendOptions.Platform.ANDROID)).setCustom("foo","bar")</code>
//      * @param sendOptions
//      * @return a SendStep
//      * @see <a href="https://documentation.onesignal.com/reference#section-example-code-create-notification">OneSignal documentation</a>
//      */
//     SendStep addOptions(SendOptions sendOptions);
// 
// }


import io.github.jklingsporn.vertx.push.AddHeadersStep;
import io.github.jklingsporn.vertx.push.PushClient;
import io.github.jklingsporn.vertx.push.SendWithOptionsStep;
import io.vertx.core.AsyncResult;
import io.vertx.core.Future;
import io.vertx.core.Handler;
import io.vertx.core.json.JsonObject;
package io.github.jklingsporn.vertx.push.noop;


/**
 * Created by jensklingsporn on 06.04.17.
 */
public class NoopPushClient implements PushClient{

    private static final PushClient INSTANCE = new NoopPushClient();

    public static PushClient getInstance() {
        return INSTANCE;
    }

    @Override
    public AddHeadersStep withTemplate(String templateId) {
        return NoopAddHeadersStep.getInstance();
    }

    @Override
    public AddHeadersStep withContent(JsonObject contents) {
        return NoopAddHeadersStep.getInstance();
    }

    @Override
    public SendWithOptionsStep raw() {
        return NoopSendWithOptionsStep.getInstance();
    }

// Path: src/main/java/io/github/jklingsporn/vertx/push/AddHeadersStep.java
// public interface AddHeadersStep extends PushToDestinationStep{
// 
//     /**
//      * Add <code>headings</code> option.
//      * @param headings something like {"en": "English Title", "es": "Spanish Title"}
//      * @return a PushToDestinationStep
//      * @see <a href="https://documentation.onesignal.com/reference#section-content-language">Create notification</a>
//      */
//     PushToDestinationStep withHeadings(JsonObject headings);
// 
// }
// 
// Path: src/main/java/io/github/jklingsporn/vertx/push/PushClient.java
// public interface PushClient {
// 
//     /**
//      * @param vertx your Vertx instance
//      * @param appId your OneSignal AppId
//      * @param restApiKey your OneSignal API-Key
//      * @return a PushClient
//      * @deprecated Consider using PushClient#create(Vertx,PushClientOptions) instead
//      */
//     static PushClient create(Vertx vertx, String appId, String restApiKey){
//         return new OneSignalPushClient(vertx, new PushClientOptions().setAppId(appId).setRestApiKey(restApiKey));
//     }
// 
//     /**
//      * @param httpClient the HttpClient to use for calling the OneSignal-API.
//      * @param appId your OneSignal AppId
//      * @param restApiKey your OneSignal API-Key
//      * @return a PushClient
//      * @deprecated Consider using PushClient#create(HttpClient,PushClientOptions) instead
//      */
//     static PushClient create(HttpClient httpClient, String appId, String restApiKey){
//         return new OneSignalPushClient(httpClient, new PushClientOptions().setAppId(appId).setRestApiKey(restApiKey));
//     }
// 
//     /**
//      * @param httpClient the HttpClient to use for calling the OneSignal-API.
//      * @param pushClientOptions the options
//      * @return a PushClient
//      * @since 1.7
//      */
//     static PushClient create(HttpClient httpClient, PushClientOptions pushClientOptions){
//         return new OneSignalPushClient(httpClient, pushClientOptions);
//     }
// 
//     /**
//      * @param vertx your Vertx instance
//      * @param pushClientOptions the options
//      * @return a PushClient
//      * @since 1.7
//      */
//     static PushClient create(Vertx vertx, PushClientOptions pushClientOptions){
//         return new OneSignalPushClient(vertx, pushClientOptions);
//     }
// 
//     /**
//      * @param webClient the WebClient to use for calling the OneSignal-API.
//      * @param pushClientOptions the options
//      * @return a PushClient
//      * @since 2.1
//      */
//     static PushClient create(WebClient webClient, PushClientOptions pushClientOptions){
//         return new OneSignalPushClient(webClient, pushClientOptions);
//     }
// 
//     /**
//      * Creating a push request using the <code>template_id</code>.
//      * @param templateId the template that should be used.
//      * @return a AddHeadersStep
//      * @see <a href="https://documentation.onesignal.com/reference#section-content-language">Create notification</a>
//      */
//     AddHeadersStep withTemplate(String templateId);
// 
//     /**
//      * Creating a push request using the <code>contents</code> option.
//      * @param contents something like {"en": "English Message", "es": "Spanish Message"}
//      * @return a AddHeadersStep
//      * @see <a href="https://documentation.onesignal.com/reference#section-content-language">Create notification</a>
//      */
//     AddHeadersStep withContent(JsonObject contents);
// 
//     /**
//      * Send a raw push request and assembling parameters on your own. Warning: no plausibility checks are made.
//      * @return SendWithOptionsStep
//      */
//     SendWithOptionsStep raw();
// 
//     /**
//      * Cancel a notification of the given id.
//      * @param notificationId the id of the notification to cancel
//      * @param resultHandler the handler dealing with the result
//      * @since 2.2
//      */
//     void cancel(String notificationId, Handler<AsyncResult<JsonObject>> resultHandler);
// 
// 
// }
// 
// Path: src/main/java/io/github/jklingsporn/vertx/push/SendWithOptionsStep.java
// public interface SendWithOptionsStep extends SendStep{
// 
//     /**
//      * Specify further options. Some common options are directly included in the <code>SendOptions</code> class others
//      * can be manually added using the <code>SendOptions#addCustom</code>-method.<br>
//      * <b>Example:</b> <code>new SendOptions().setPlatform(EnumSet.of(SendOptions.Platform.AMAZON, SendOptions.Platform.ANDROID)).setCustom("foo","bar")</code>
//      * @param sendOptions
//      * @return a SendStep
//      * @see <a href="https://documentation.onesignal.com/reference#section-example-code-create-notification">OneSignal documentation</a>
//      */
//     SendStep addOptions(SendOptions sendOptions);
// 
// }


// Path: src/main/java/io/github/jklingsporn/vertx/push/noop/NoopPushClient.java
import io.github.jklingsporn.vertx.push.AddHeadersStep;
import io.github.jklingsporn.vertx.push.PushClient;
import io.github.jklingsporn.vertx.push.SendWithOptionsStep;
import io.vertx.core.AsyncResult;
import io.vertx.core.Future;
import io.vertx.core.Handler;
import io.vertx.core.json.JsonObject;

package io.github.jklingsporn.vertx.push.noop;


/**
 * Created by jensklingsporn on 06.04.17.
 */
public class NoopPushClient implements PushClient{

    private static final PushClient INSTANCE = new NoopPushClient();

    public static PushClient getInstance() {
        return INSTANCE;
    }

    @Override
    public AddHeadersStep withTemplate(String templateId) {
        return NoopAddHeadersStep.getInstance();
    }

    @Override
    public AddHeadersStep withContent(JsonObject contents) {
        return NoopAddHeadersStep.getInstance();
    }

    @Override
    public SendWithOptionsStep raw() {
        return NoopSendWithOptionsStep.getInstance();
    }

    @Override