'use strict';

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

let battle;

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

	it('should change the user to Normal-type (except in Generation V, to Ground-type)', () => {
		battle = common.gen(7).createBattle([[
			{ species: 'wynaut', moves: ['camouflage'] },
		], [
			{ species: 'ralts', moves: ['sleeptalk'] },
		]]);

		battle.makeChoices();
		assert.equal(battle.p1.active[0].types[0], 'Normal');

		battle = common.gen(4).createBattle([[
			{ species: 'wynaut', moves: ['camouflage'] },
		], [
			{ species: 'ralts', moves: ['sleeptalk'] },
		]]);

		battle.makeChoices();
		assert.equal(battle.p1.active[0].types[0], 'Normal');

		battle = common.gen(5).createBattle([[
			{ species: 'wynaut', moves: ['camouflage'] },
		], [
			{ species: 'ralts', moves: ['sleeptalk'] },
		]]);

		battle.makeChoices();
		assert.equal(battle.p1.active[0].types[0], 'Ground');
	});

	it('should fail on Multitype in Gen 4 and Arceus itself in Gen 5+', () => {
		// Gen 4
		battle = common.gen(4).createBattle([[
			{ species: 'arceus', ability: 'flashfire', moves: ['ember', 'conversion', 'camouflage'] },
			{ species: 'goldeen', ability: 'multitype', moves: ['camouflage'] },
		], [
			{ species: 'feebas', moves: ['sleeptalk'] },
		]]);

		battle.makeChoices('move conversion', 'auto');
		battle.makeChoices('move camouflage', 'auto');
		assert.equal(battle.p1.active[0].types[0], 'Normal');

		battle.makeChoices('switch 2', 'auto');
		battle.makeChoices();
		assert.equal(battle.p1.active[0].types[0], 'Water'); // If test fails, would be Normal-type

		// Gen 5
		battle = common.gen(5).createBattle([[
			{ species: 'arceus', ability: 'flashfire', moves: ['camouflage'] },
			{ species: 'goldeen', ability: 'multitype', moves: ['camouflage'] },
		], [
			{ species: 'ralts', moves: ['sleeptalk'] },
		]]);

		battle.makeChoices();
		assert.equal(battle.p1.active[0].types[0], 'Normal'); // If test fails, would be Ground-type

		battle.makeChoices('switch 2', 'auto');
		battle.makeChoices();
		assert.equal(battle.p1.active[0].types[0], 'Ground');
	});

	it('should fail in Gen 3-4 if the user already has what Camouflage would change to as either of its types', () => {
		// Gen 4
		battle = common.gen(4).createBattle([[
			{ species: 'pidgey', moves: ['camouflage'] },
		], [
			{ species: 'ralts', moves: ['sleeptalk'] },
		]]);

		battle.makeChoices();
		assert.equal(battle.p1.active[0].types.length, 2); // If test fails, would be 1 type only

		// Gen 5
		battle = common.gen(5).createBattle([[
			{ species: 'gligar', moves: ['camouflage'] },
		], [
			{ species: 'ralts', moves: ['sleeptalk'] },
		]]);

		battle.makeChoices();
		assert.equal(battle.p1.active[0].types.length, 1); // If test fails, would be 2 types
	});
});
