/**
 * Converts a message text command to proper format
 * Example: "/mute @username" to "/mute @userId"
 * Supports "/ban", "/unban", "/mute", "/unmute"
 * @param messageText
 * @param mentionedUsers
 * @returns
 */
export function patchMessageTextCommand(messageText: string, mentionedUserIds: string[]): string {
  if (mentionedUserIds.length === 0) {
    return messageText;
  }
  const trimmedMessageText = messageText.trim();

  /**
   * The required formats are "/unban @userid" or "/mute @userid" or "/unmute @userid"
   */
  if (
    trimmedMessageText.startsWith('/mute ') ||
    trimmedMessageText.startsWith('/unmute ') ||
    trimmedMessageText.startsWith('/unban ')
  ) {
    return trimmedMessageText.replace(/@.+/, `@${mentionedUserIds[0]}`);
  }

  /**
   * The required format is "/ban @userid reason"
   */
  if (trimmedMessageText.startsWith('/ban ')) {
    // TODO: There is a bug here. If the name has two words, the reason will be the surname of the user.
    const reasonText = trimmedMessageText.split(' ').pop() ?? '';
    return `/ban @${mentionedUserIds[0]} ${reasonText}`.trim();
  }

  return messageText;
}
