package crate.elasticsearch.module.reindex;

import org.elasticsearch.action.GenericAction;
import org.elasticsearch.action.support.TransportAction;
import org.elasticsearch.common.inject.AbstractModule;
import org.elasticsearch.common.inject.multibindings.MapBinder;

import crate.elasticsearch.action.reindex.ReindexAction;
import crate.elasticsearch.action.reindex.ReindexParser;
import crate.elasticsearch.action.reindex.TransportReindexAction;

public class ReindexModule extends AbstractModule {

    @Override
    protected void configure() {
        bind(TransportReindexAction.class).asEagerSingleton();

        bind(ReindexParser.class).asEagerSingleton();

        MapBinder<GenericAction, TransportAction> transportActionsBinder =
                MapBinder.newMapBinder(
                        binder(), GenericAction.class, TransportAction.class);

        transportActionsBinder.addBinding(ReindexAction.INSTANCE).to(
                TransportReindexAction.class).asEagerSingleton();

        MapBinder<String, GenericAction> actionsBinder = MapBinder
                .newMapBinder(binder(), String.class, GenericAction.class);
        actionsBinder.addBinding(ReindexAction.NAME).toInstance(
                ReindexAction.INSTANCE);

    }

}