/**
 * @mergeTarget
 * @module Src/Messages/Received/Handlers
 */

import { CompressorController } from "../../controllers/compressor-controller";
import { MessageManager } from "../../managers/message-manager";
import { UserController } from "../../controllers/user-controller";

/**
 * Handler for received message {@link Src/Messages/Received.ReceivedMessageNames.ALL_ENCODED | ALL_ENCODED}.\
 * This function encode all datas
 * @async
 * @param {MessageManager} this - Context of {@link Src/Managers.MessageManager | MessageManager}
 * @returns Returns a promise containing nothing
 * @source
 */
async function allEncodedHandler(this: MessageManager): Promise<void> {
  const usernames = JSON.stringify(UserController.current.usernames);
  const formatedUsers = [];
  for (const user of UserController.current.users.values()) {
    formatedUsers.push(user.formatForSaving());
  }
  this.sendAllEncodedResponseMessage(
    `lisioUsernames${encodeURIComponent(
      `=${btoa(usernames)}`,
    )}&lisioUsers${encodeURIComponent(
      `=${CompressorController.current.encodeUsers(formatedUsers)}`,
    )}`,
  );
}

export { allEncodedHandler };
