import emptyProtector from '../app/utils/empty-protector';

export function checkMapData(
  {
    entities: {
      challenge,
      block,
      superBlock
    },
    result: { superBlocks }
  }
) {
  if (
    !challenge ||
    !block ||
    !superBlock ||
    !superBlocks ||
    !superBlocks.length
  ) {
    throw new Error(
      'entities not found, db may not be properly seeded'
    );
  }
}
// getFirstChallenge(
//   map: {
//     entities: { challenge: Object, block: Object, superBlock: Object },
//     result: [...superBlockDashedName: String]
//   }
// ) => Challenge|Void
export function getFirstChallenge({
  entities: { superBlock, block, challenge },
  result: { superBlocks }
}) {
  return challenge[
    emptyProtector(block[
      emptyProtector(superBlock[
        superBlocks[0]
      ]).blocks[0]
    ]).challenges[0]
  ];
}

// let challengeDashedName: String;
// createNameIdMap({
//  challenge: {
//    [...challengeDashedName ]: Challenge
// }) => {
//   challengeIdToName: {
//     [ ...challengeId ]: challengeDashedName
//   }
//  };
export function createNameIdMap({ challenge }) {
  return {
    challengeIdToName: Object.keys(challenge)
      .reduce((map, challengeName) => {
        map[challenge[challengeName].id] =
          challenge[challengeName].dashedName;
        return map;
      }, {})
  };
}
// addNameIdMap(
//  map: { entities; Object, ...rest }
// ) => { ...rest, entities: Object };
export function addNameIdMap({ entities, ...rest }) {
  return {
    ...rest,
    entities: {
      ...entities,
      ...createNameIdMap(entities)
    }
  };
}
