'use strict';

const assert = require('./../../assert');
const common = require('./../../common');

let battle;

describe('Max Guard', function () {
	afterEach(function () {
		battle.destroy();
	});

	it('should be disallowed by Taunt', function () {
		battle = common.createBattle([[
			{species: "Feebas", moves: ['splash', 'tackle']},
		], [
			{species: "Wynaut", moves: ['taunt', 'splash']},
		]]);
		battle.makeChoices('move tackle dynamax', 'auto');
		assert.cantMove(() => battle.choose('p1', 'move splash'), 'Feebas', 'Max Guard', false);
	});

	it('should allow Feint to damage the user, but not break the protection effect', function () {
		battle = common.createBattle({gameType: 'doubles'}, [[
			{species: 'minun', moves: ['sleeptalk']},
			{species: 'plusle', moves: ['sleeptalk']},
		], [
			{species: 'wynaut', ability: 'noguard', moves: ['fissure']},
			{species: 'wynaut', moves: ['feint']},
		]]);
		battle.makeChoices('move sleeptalk dynamax, move sleeptalk', 'move fissure 1, move feint 1');

		const minun = battle.p1.active[0];
		assert.false.fainted(minun);
	});

	it('should block certain moves that bypass Protect', function () {
		battle = common.createBattle({gameType: 'doubles'}, [[
			{species: 'sunflora', item: 'sitrusberry', ability: 'minus', moves: ['sleeptalk']},
			{species: 'plusle', ability: 'plus', moves: ['magneticflux', 'gearup']},
		], [
			{species: 'ferrothorn', item: 'sitrusberry', moves: ['flowershield', 'teatime']},
			{species: 'tsareena', ability: 'intrepidsword', moves: ['psychup', 'sleeptalk']},
		]]);

		battle.makeChoices('move sleeptalk dynamax, move magneticflux', 'move flowershield, move psychup 1');
		const sunflora = battle.p1.active[0];
		const tsareena = battle.p2.active[1];
		assert.statStage(sunflora, 'def', 0, 'should block magneticflux and flowershield');
		assert.statStage(sunflora, 'spd', 0, 'should block magneticflux');
		assert.statStage(tsareena, 'atk', 1, 'should not have changed from +1 (intrepidsword) to 0 (psychup)');

		sunflora.volatiles.stall.counter = 1;
		battle.makeChoices('move sleeptalk, move gearup', 'move teatime, move sleeptalk');
		assert.statStage(sunflora, 'atk', 0, 'should block gearup');
		assert.statStage(sunflora, 'spa', 0, 'should block gearup');
		assert.equal(sunflora.item, 'sitrusberry', 'should block teatime');
		assert.statStage(tsareena, 'atk', 1);
	});
});
