package ru.nts.core.network.outgoing;
import ru.nts.core.network.GameClient;
import ru.nts.core.network.GameClientOutgoingPackets;
import ru.nts.core.network.IClientOutgoingPacket;
import ru.nts.core.network.PacketWriter;
import ru.nts.gameserver.game.world.objects.WorldObject;
import ru.nts.gameserver.game.world.objects.creatures.Creature;
import ru.nts.gameserver.system.enums.EL2_SND_TYPE;
public class S_PLAY_SOUND implements IClientOutgoingPacket {
    private final EL2_SND_TYPE snd_type;
    private final String pszFileName;
    private final int nCount;
    private final int nServerID;
    private final int x;
    private final int y;
    private final int z;
    private final int Delay;
    @Override
    public int getPriority() {
        return IClientOutgoingPacket.MIN_PRIORITY;
    }
    public static S_PLAY_SOUND createSound(String soundFile){
        return new S_PLAY_SOUND(EL2_SND_TYPE.SND_EFFECT, soundFile, 0);
    }
    public static S_PLAY_SOUND createMusic(String soundFile, int delay){
        return new S_PLAY_SOUND(EL2_SND_TYPE.SND_MUSIC, soundFile, delay);
    }
    public static S_PLAY_SOUND createStreamingVoice(String soundFile, int delay){
        return new S_PLAY_SOUND(EL2_SND_TYPE.SND_STREAMING_VOICE, soundFile, delay);
    }
    public static S_PLAY_SOUND createNPCVoice(Creature creature, String soundFile, int delay){
        return new S_PLAY_SOUND(EL2_SND_TYPE.SND_NPC_VOICE, soundFile, creature, delay);
    }
    public static S_PLAY_SOUND createItemMusic(Creature creature, String soundFile, int delay){
        return new S_PLAY_SOUND(EL2_SND_TYPE.SND_ITEM_MUSIC, soundFile, creature, delay);
    }
    public static S_PLAY_SOUND createDynamicalSound(String soundFile, WorldObject object){
        return new S_PLAY_SOUND(EL2_SND_TYPE.SND_EFFECT, soundFile, object);
    }
    public static S_PLAY_SOUND manualCreateSound(EL2_SND_TYPE type, String soundFile, int bindToObject, int objectId, int x, int y, int z, int delay){
        return new S_PLAY_SOUND(type, soundFile, bindToObject, objectId, x, y, z, delay);
    }
    private S_PLAY_SOUND(EL2_SND_TYPE type, String soundFile, int delay) {
        snd_type = type;
        pszFileName = soundFile;
        nCount = 0;
        nServerID = 0;
        x = 0;
        y = 0;
        z = 0;
        Delay = delay;
    }
    private S_PLAY_SOUND(EL2_SND_TYPE type, String soundFile, WorldObject object) {
        snd_type = type;
        pszFileName = soundFile;
        nCount = 1;
        nServerID = object.getObjectId();
        x = object.getX();
        y = object.getY();
        z = object.getZ();
        Delay = 0;
    }
    private S_PLAY_SOUND(EL2_SND_TYPE type, String soundFile, WorldObject object, int delay) {
        snd_type = type;
        pszFileName = soundFile;
        nCount = 0;
        nServerID = object.getObjectId();
        x = object.getX();
        y = object.getY();
        z = object.getZ();
        Delay = delay;
    }
    private S_PLAY_SOUND(EL2_SND_TYPE type, String soundFile, int bindToObject, int objectId, int x, int y, int z, int delay) {
        snd_type = type;
        pszFileName = soundFile;
        nCount = bindToObject;
        nServerID = objectId;
        this.x = x;
        this.y = y;
        this.z = z;
        Delay = delay;
    }
    @Override
    public void write(PacketWriter packet, GameClient client) {
        GameClientOutgoingPackets.S_PLAY_SOUND.writeId(packet);
        packet.writeD(snd_type);
        packet.writeS(pszFileName);
        packet.writeD(nCount);
        packet.writeD(nServerID);
        packet.writeD(x);
        packet.writeD(y);
        packet.writeD(z);
        packet.writeD(Delay);
    }
}