    'use strict';
    import { shuffleHeroes, getDraftSets } from '../heroesHelper';
    export default function selectDraftState(duelController) {
      let duelCtrl = duelController;
      let draftSets = [];
      // For draft there are two turns, we are at 0
      let draftTurn = 0;
      //Blue will get first 6 cards, and red following 6
      let blueDraftSetnb = 0;
      let redDraftSetnb = 1;

      let start = () => {
        /** @type {import('type/game').TH_GameDataStore} */
        let gameData = duelCtrl.getGameData();
        draftSets = getDraftSets(
          gameData.game.allHeroes,
          gameData.game.advRules.includes('popularity')
        );
        draftTurn = 1;

        gameData.bluePlayer.draftHeroesIds =
          draftSets[draftTurn - 1][blueDraftSetnb];
        gameData.redPlayer.draftHeroesIds = draftSets[draftTurn - 1][redDraftSetnb];
        gameData.game['waitingFor/blue'] = true;
        gameData.game['waitingFor/red'] = true;
        gameData.game.currentPlayer = 'both';
        duelCtrl.storeData(gameData);
      };

      let update = (
        /** @type {import('type/comm').TH_MessageDraftStep} */ payload = null
      ) => {
        /** @type {import('type/game').TH_GameDataStore} */
        let gameData = duelCtrl.getGameData();
        if (payload) {
          let player = payload.color + 'Player';
          gameData[player].twelveHeroes = payload.twelveHeroes;
          gameData[player].draftHeroesIds = payload.draftHeroesIds;
          gameData.game['waitingFor/' + payload.color] = false;
          duelCtrl.storeData(gameData);
        }

        // We finished waiting for both players to select 2 cards
        if (
          gameData.game['waitingFor/blue'] === false &&
          gameData.game['waitingFor/red'] === false
        ) {
          // Check if players completed their deck
          if (
            gameData.bluePlayer.twelveHeroes.length == 12 &&
            gameData.redPlayer.twelveHeroes.length == 12
          ) {
            shuffleHeroes(gameData.bluePlayer.twelveHeroes);
            shuffleHeroes(gameData.redPlayer.twelveHeroes);
            // End of state, decks are complete
            duelCtrl.endCurrentState();
          } else {
            // Check if set of 6 cards is done
            if (gameData.redPlayer.draftHeroesIds.length === 0) {
              // Deal next 6 cards
              draftTurn++;
              gameData.bluePlayer.draftHeroesIds =
                draftSets[draftTurn - 1][blueDraftSetnb];
              gameData.redPlayer.draftHeroesIds =
                draftSets[draftTurn - 1][redDraftSetnb];
            } else {
              // swap cards
              let temp = gameData.bluePlayer.draftHeroesIds;
              gameData.bluePlayer.draftHeroesIds =
                gameData.redPlayer.draftHeroesIds;
              gameData.redPlayer.draftHeroesIds = temp;
            }
            // Wait again for players to chose 2 more cards
            gameData.game['waitingFor/blue'] = true;
            gameData.game['waitingFor/red'] = true;
            duelCtrl.storeData(gameData);
          }
        }
      };

      let end = () => {
        console.log('Go to next game state : 2_CHANGE_UP_TO_3_CARDS');

        duelCtrl.setCurrentState('2_CHANGE_UP_TO_3_CARDS');
        duelCtrl.startCurrentState();
      };
      return {
        start,
        update,
        end
      };
    }