/************************************************************************************
 * This code is used EXCLUSIVELY when iFractions is runnign inside Moodle via iAssign
 * as an iLM (interactive learning module) and the global variable moodle=true.
 *
 * This file holds game states.
 ************************************************************************************/

/**
 * [STUDENT REPORT STATE] Screen that shows the stats of a previously played game (exclusive to moodle).
 *
 * FOR MOODLE
 *
 * @namespace
 */
const studentReport = {
  /** FOR MOODLE
   * Main code
   */
  create: function () {
    const offsetX = context.canvas.width / 4;
    const offsetY = 37.5;

    const x0 = offsetX / 2;
    const y0 = context.canvas.height / 2 - 100;

    const titleFont = { ...textStyles.h1_, fill: colors.green };
    const infoFont = {
      ...textStyles.h4_,
      align: 'left',
      fill: colors.maroon,
    };

    renderBackground();

    // Title
    game.add.text(context.canvas.width / 2, 120, game.lang.results, titleFont);
    game.add.image(
      x0 - 80,
      y0 - 110,
      gameList[gameId].assets.menu.gameNameBtn,
      1.4
    );

    this.utils.renderCurGameMetadata(y0, offsetY, infoFont);
    this.utils.renderCurGameStats(x0, offsetX, offsetY, infoFont);
  },

  utils: {
    renderCurGameMetadata: function (defaultY, offsetY, font) {
      // Game info
      let text =
        game.lang[gameShape].charAt(0).toUpperCase() +
        game.lang[gameShape].slice(1);
      text =
        game.lang.game +
        ': ' +
        text +
        (gameName.slice(-3) == 'One' ? ' I' : ' II');

      const x0 = 360;

      game.add.text(x0, defaultY - offsetY * 2, text, font);
      game.add.text(
        x0,
        defaultY - offsetY,
        game.lang.game_mode + ': ' + gameMode.toUpperCase(),
        font
      );
      const operationText =
        gameOperation.charAt(0).toUpperCase() + gameOperation.slice(1);
      game.add.text(
        x0,
        defaultY,
        game.lang.operation + ': ' + operationText,
        font
      );
      game.add.text(
        x0,
        defaultY + offsetY,
        game.lang.difficulty + ': ' + gameDifficulty,
        font
      );
    },
    renderCurGameStats: function (defaultX, offsetX, offsetY, font) {
      // Student info
      const y0 = context.canvas.height - 300;
      let x = defaultX;

      for (let i = 0; i < 4; i++, x += offsetX) {
        // If level wasnt completed, show broken sign
        if (moodleVar.hits[i] === 0 && moodleVar.errors[i] === 0) {
          const sign = game.add.image(
            x,
            context.canvas.height - 150,
            'sign_broken',
            1.2
          );
          sign.anchor(0.5, 0.5);
          continue;
        }

        // If level was completed shows sign with level number and student report
        const sign = game.add.image(
          x,
          context.canvas.height - 150,
          'sign',
          1.2
        );
        sign.anchor(0.5, 0.5);

        const numberFont = {
          ...textStyles.h2_,
          font: 'bold ' + textStyles.h2_.font,
          fill: colors.white,
        };
        game.add.text(x, context.canvas.height - 150, '' + (i + 1), numberFont);

        game.add.geom.rect(
          x - 40 - 50,
          y0 - offsetY * 1.75,
          10,
          135 * 1.5,
          colors.blue,
          0.1
        );
        game.add.text(
          x - 60,
          y0 - offsetY,
          game.lang.time + ': ' + game.math.convertTime(moodleVar.time[i]),
          font
        );
        game.add.text(
          x - 60,
          y0,
          game.lang.hits + ': ' + moodleVar.hits[i],
          font
        );
        game.add.text(
          x - 60,
          y0 + offsetY,
          game.lang.errors + ': ' + moodleVar.errors[i],
          font
        );
      }
    },
  },
};