/**
 * This file is part of tera-api.
 * 
 * tera-api is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * tera-api is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with tera-api.  If not, see <http://www.gnu.org/licenses/>.
 */
package com.tera.gapi.npc.bundle;

import com.google.inject.Provides;
import com.google.inject.Scopes;
import com.tera.common.dataload.DataLoadServiceInvoker;
import com.tera.common.service.startup.TAGuiceModule;
import com.tera.common.service.startup.annotation.DataManagerInit;
import com.tera.gapi.npc.loader.DbNpcTemplateLoader;
import com.tera.gapi.npc.loader.NpcTemplateLoader;
import com.tera.gapi.npc.service.CNpcFactory;
import com.tera.gapi.npc.template.NpcData;
import com.tera.gapi.spawn.service.NpcFactory;

/**
 * @author ATracer
 * @since 0.0.9
 */
public class NpcDM extends TAGuiceModule {

  @Override
  protected void configure() {
    // loader
    bind(NpcTemplateLoader.class).to(DbNpcTemplateLoader.class).in(Scopes.SINGLETON);

    // service
    bind(NpcFactory.class).to(CNpcFactory.class).in(Scopes.SINGLETON);

    // interceptors
    addInterceptor(new DataLoadServiceInvoker(NpcTemplateLoader.class), DataManagerInit.class);
  }

  @Provides
  public NpcData provideWorldMapData(NpcTemplateLoader loader) {
    return loader.get();
  }
}
