package com.nyrds.pixeldungeon.items.icecaves;

import com.nyrds.pixeldungeon.ml.R;
import com.watabou.noosa.Game;
import com.watabou.noosa.audio.Sample;
import com.watabou.noosa.particles.Emitter;
import com.watabou.pixeldungeon.Assets;
import com.watabou.pixeldungeon.Dungeon;
import com.watabou.pixeldungeon.ResultDescriptions;
import com.watabou.pixeldungeon.actors.Actor;
import com.watabou.pixeldungeon.actors.Char;
import com.watabou.pixeldungeon.actors.buffs.Buff;
import com.watabou.pixeldungeon.actors.buffs.Frost;
import com.watabou.pixeldungeon.actors.buffs.Slow;
import com.watabou.pixeldungeon.effects.MagicMissile;
import com.watabou.pixeldungeon.effects.particles.SnowParticle;
import com.watabou.pixeldungeon.items.wands.Wand;
import com.watabou.pixeldungeon.utils.GLog;
import com.watabou.pixeldungeon.utils.Utils;
import com.watabou.utils.Callback;
import com.watabou.utils.Random;

import org.jetbrains.annotations.Nullable;

public class WandOfIcebolt extends Wand {

	public WandOfIcebolt() {
		imageFile = "items/wands.png";
		image = 12;
	}

	@Override
	protected void onZap( int cell ) {

		Char ch = Actor.findChar( cell );
		if (ch != null) {

			int level = effectiveLevel();

			ch.damage( Random.Int( 3 + level, 4 + level * 2 ), this );
			ch.getSprite().burst( 0xFF99FFFF, level / 2 + 3 );

			Buff.affect( ch, Frost.class, Frost.duration( ch ) / 2 + effectiveLevel() );
			Buff.affect( ch, Slow.class, Slow.duration( ch ) / 2 + effectiveLevel() );

			if (ch == getOwner() && !ch.isAlive()) {
				Dungeon.fail( Utils.format( ResultDescriptions.getDescription(ResultDescriptions.Reason.WAND), name, Dungeon.depth ) );
				GLog.n(Game.getVar(R.string.WandOfIcebolt_Info1));
			}
		}
	}
	
	protected void fx( int cell, Callback callback ) {
		MagicMissile.ice( getOwner().getSprite().getParent(), getOwner().getPos(), cell, callback );
		Sample.INSTANCE.play( Assets.SND_ZAP );
	}
	
	@Override
	public String desc() {
		return Game.getVar(R.string.WandOfIcebolt_Info);
	}

	@Override
	public boolean isKnown() {
		return true;
	}

	@Nullable
	@Override
	public Emitter.Factory emitter() {
		return SnowParticle.FACTORY;
	}

	@Override
	public float emitterInterval() {
		return 0.1f;
	}
}