'use strict';
exports.BattleScripts = {
   switchIn: function (pokemon, pos) {
     if (!pokemon || pokemon.isActive) return false;
     if (!pos) pos = 0;
     let side = pokemon.side;
     if (pos >= side.active.length) {
       throw new Error("Invalid switch position");
     }
     if (side.active[pos]) {
       let oldActive = side.active[pos];
       let foeActive = side.foe.active[0];
       let lastMove = this.getMove(oldActive.lastMove);
       let foeMove = this.getMove(foeActive.lastMove);
       if ((lastMove === 'voltswitch' || lastMove === 'uturn' || lastMove === 'partingshot') || (foeMove.id === 'whirlwind' || foeMove.id === 'roar' || foeMove.id === 'dragontail' || foeMove.id === 'circlethrow')) {
         oldActive.clearVolatile();
       }
       pokemon.copyVolatileFrom(oldActive);
       if (this.cancelMove(oldActive)) {
         for (let i = 0; i < side.foe.active.length; i++) {
           if (side.foe.active[i].isStale >= 2) {
             oldActive.isStaleCon++;
             oldActive.isStaleSource = 'drag';
             break;
           }
         }
       }
       if (oldActive.switchCopyFlag === 'copyvolatile') {
         delete oldActive.switchCopyFlag;
       }
     }
     pokemon.isActive = true;
     //this.runEvent('BeforeSwitchIn', pokemon);
     if (side.active[pos]) {
       let oldActive = side.active[pos];
       oldActive.isActive = false;
       oldActive.isStarted = false;
       oldActive.usedItemThisTurn = false;
       oldActive.position = pokemon.position;
       pokemon.position = pos;
       side.pokemon[pokemon.position] = pokemon;
       side.pokemon[oldActive.position] = oldActive;
       this.cancelMove(oldActive);
       oldActive.clearVolatile();
     }
     side.active[pos] = pokemon;
     pokemon.activeTurns = 0;
     for (let m in pokemon.moveset) {
       pokemon.moveset[m].used = false;
     }
     this.add('switch', pokemon, pokemon.getDetails);
     let statArray = ['atk', 'def', 'spa', 'spd', 'spe'];
     for (let i = 0; i < statArray.length; i++) {
       if (pokemon.boosts[statArray[i]] !== 0) {
         this.add('-boost', pokemon, statArray[i], pokemon.boosts[statArray[i]], '[silent]');
       }
     }
     let volArray = Object.getOwnPropertyNames(pokemon.volatiles);
     for (let i = 0; i < volArray.length; i++) {
       let currentVol = volArray[i];
       this.add('-start', pokemon, currentVol);
     }
     pokemon.update();
     this.insertQueue({pokemon: pokemon, choice: 'runSwitch'});
   }
};