'use strict';

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

let battle;

describe('After You', () => {
	afterEach(() => {
		battle.destroy();
	});

	it(`should cause the targeted Pokemon to immediately move next`, () => {
		battle = common.createBattle({ gameType: 'doubles' }, [[
			{ species: 'Wynaut', ability: 'prankster', moves: ['afteryou'] },
			{ species: 'Magnemite', level: 1, moves: ['magnetrise'] },
		], [
			{ species: 'Great Tusk', moves: ['headlongrush'] },
			{ species: "Magikarp", moves: ['sleeptalk'] },
		]]);

		battle.makeChoices('move afteryou -2, move magnetrise', 'move headlongrush 2, auto');
		const magnemite = battle.p1.active[1];
		assert.false.fainted(magnemite);
	});

	it(`should only cause the target to move next, not run a submove`, () => {
		battle = common.createBattle({ gameType: 'doubles' }, [[
			{ species: 'Wynaut', ability: 'prankster', moves: ['afteryou'] },
			{ species: 'Necrozma', level: 50, ability: 'prankster', moves: ['photongeyser'] },
		], [
			{ species: 'Dugtrio', moves: ['sleeptalk'] },
			{ species: 'Roggenrola', level: 1, ability: 'sturdy', moves: ['sleeptalk'] },
		]]);

		// Photon Geyser has a mechanic where it ignores abilities with Mold Breaker,
		// but doesn't when called via a submove like Sleep Talk. If it fails to KO through Sturdy,
		// it's most likely because it's using submove behavior
		battle.makeChoices('move afteryou -2, move photongeyser 2', 'auto');
		const roggenrola = battle.p2.active[1];
		assert.fainted(roggenrola);
	});

	it(`should work in a free-for-all`, () => {
		battle = common.createBattle({ gameType: 'freeforall' }, [[
			{ species: 'Wynaut', ability: 'prankster', moves: ['afteryou'] },
		], [
			{ species: 'Magnemite', level: 1, moves: ['magnetrise'] },
		], [
			{ species: 'Great Tusk', moves: ['headlongrush'] },
		], [
			{ species: 'Magikarp', moves: ['sleeptalk'] },
		]]);

		battle.makeChoices('move afteryou 1', 'move magnetrise', 'move headlongrush 1', 'auto');
		const magnemite = battle.p2.active[0];
		assert.false.fainted(magnemite);
	});

	it(`should fail in singles whether the user is faster or slower than its target`, () => {
		battle = common.createBattle([[
			{ species: 'Wynaut', moves: ['afteryou', 'ember'] },
		], [
			{ species: 'Tyrogue', moves: ['afteryou', 'seismictoss'] },
		]]);

		battle.makeChoices('move afteryou', 'move seismictoss');
		battle.makeChoices('move ember', 'move afteryou');
		assert(battle.log.includes('|-fail|p1a: Wynaut'));
		assert(battle.log.includes('|-fail|p2a: Tyrogue'));
	});
});
