/**
 * 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.player.service;

import javax.inject.Inject;

import com.tera.common.network.model.NetworkChannel;
import com.tera.common.network.service.ChannelStateService;
import com.tera.gapi.player.model.Player;

/**
 * @author ATracer
 * @since 0.0.6
 */
public abstract class AbstractPlayerSpawnService implements PlayerSpawnService {

  @Inject
  private PlayerService playerService;
  @Inject
  private ChannelStateService channelStateService;

  @Override
  public void spawnPlayer(NetworkChannel channel, int playerId) {
    Player player = playerService.loadPlayer(channel.getObjectId(), playerId);
    channelStateService.ingame(channel, player);

    sendInfoPackets(player);
    sendLocationPackets(player);
  }

  @Override
  public void mapLoaded(Player player) {
    sendAfterMapLoadPackets(player);
  }

  /**
   * <p>
   * Packets about player info
   * </p>
   * 
   * @param player
   */
  protected abstract void sendInfoPackets(Player player);

  /**
   * <p>
   * Packets about current spawn location
   * </p>
   * 
   * @param player
   */
  protected abstract void sendLocationPackets(Player player);

  /**
   * @param player
   */
  protected abstract void sendAfterMapLoadPackets(Player player);
}
