var ChatManagementCommon = {};

//招待するメンバーを保存する変数
ChatManagementCommon.selectedUserList = new Array();

ChatManagementCommon.showMakeRoomConfirmView = function () {
  $("#selectedUserList").html("");

  const userTemplate = getTemplate(TemplateURL.MAKE_ROOM_CONFIRM_USER_LIST);

  const selectedUserList = NativeBridgeDataSource.loadSelectedUsers();

  selectedUserList.forEach(function (user) {
    const html = Mustache.render(userTemplate, {
      id: user.shopMemberId,
      profileImage: Common.getProfileImgUrl(user.profileUrl),
      name: user.shopMemberName,
    });
    const obj = jQuery.parseHTML(html);
    $("#selectedUserList").append(obj);
  });

  $("#makeRoomBtn")
    .off()
    .on("click", function () {
      // #36130に対応
      const trimmedRoomName = $("#newRoomName").val().trim();
      if (trimmedRoomName.length == 0) {
        // loadingIndicatorを表示
        Common.showLoadingIndicator();
        let userIDList = new Array();
        let userNameList = new Array();

        selectedUserList.forEach(function (user) {
          userIDList.push(user.shopMemberId);
          userNameList.push(user.shopMemberName);
        });

        // 参加ユーザ名でルーム名を生成
        let newRoomName =
          currentUserInfo.loginID + "," + userNameList.join(",");
        NativeBridgeDelegate.createChatRoom(
          ChatRoomType.DM,
          userIDList.join(","),
          newRoomName,
          MakeRoomFlag.MAKE_ROOM,
          false
        );
      } else if (
        trimmedRoomName.includes(";") ||
        trimmedRoomName.includes("/") ||
        trimmedRoomName.includes("?") ||
        trimmedRoomName.includes(":") ||
        trimmedRoomName.includes("@") ||
        trimmedRoomName.includes("&") ||
        trimmedRoomName.includes("=") ||
        trimmedRoomName.includes("+") ||
        trimmedRoomName.includes("$") ||
        trimmedRoomName.includes(",") ||
        trimmedRoomName.includes("-") ||
        trimmedRoomName.includes("_") ||
        trimmedRoomName.includes(".") ||
        trimmedRoomName.includes("!") ||
        trimmedRoomName.includes("~") ||
        trimmedRoomName.includes("*") ||
        trimmedRoomName.includes("'") ||
        trimmedRoomName.includes("(") ||
        trimmedRoomName.includes(")") ||
        trimmedRoomName.includes("#") ||
        trimmedRoomName.includes("\\") ||
        trimmedRoomName.includes('"') ||
        trimmedRoomName.includes("`")
      ) {
        // #36147
        // #36174
        $("#customAlertTitle").text(getLocalizedString("invalidCharacter"));
        $("#customAlertOk").text(getLocalizedString("yesTitle"));

        $("#customAlert")
          .appendTo("body")
          .modal({
            backdrop: "static",
            keyboard: false,
          })
          .on("click", "#customAlertOk", function (e) {});
      } else if (trimmedRoomName.length > 20) {
        // #36142
        var inputText = $("#newRoomName").val().trim(); // #36142 文字列の前又は後の空白文字列を削除

        // #36174
        $("#customAlertTitle").text(getLocalizedString("nameTooLong"));
        $("#customAlertOk").text(getLocalizedString("yesTitle"));

        $("#customAlert")
          .appendTo("body")
          .modal({
            backdrop: "static",
            keyboard: false,
          })
          .on("click", "#customAlertOk", function (e) {
            $("#newRoomName").val(
              inputText.substr(0, $("#newRoomName").prop("maxlength"))
            );
          });
      } else {
        //loadingIndicatorを表示
        Common.showLoadingIndicator();
        let userIdList = selectedUserList.map((user) => user.shopMemberId);

        // TODO: check why here using trimmedroomname instead of encodedRoomName
        // ルーム名のtrimmingした後、URIencodingを行う
        const encodedRoomName = encodeURIComponent(trimmedRoomName);
        NativeBridgeDelegate.createChatRoom(
          ChatRoomType.DM,
          userIdList.join(","),
          trimmedRoomName,
          MakeRoomFlag.MAKE_ROOM,
          false
        );
      }
    });

  $("#newRoomName").attr("placeholder", getLocalizedString("newRoomName"));
};

ChatManagementCommon.showAddUserConfirmView = function () {
  $("#selectedUserList").html("");

  const userTemplate = getTemplate(TemplateURL.ADD_USER_CONFIRM_USER_LIST);
  const selectedUserList = NativeBridgeDataSource.loadSelectedUsers();

  selectedUserList.forEach(function (user) {
    let html = Mustache.render(userTemplate, {
      id: user.shopMemberId,
      profileImage: Common.getProfileImgUrl(user.profileUrl),
      name: user.shopMemberName,
    });
    let obj = jQuery.parseHTML(html);
    $("#selectedUserList").append(obj);
  });

  $("#addUserBtn")
    .off()
    .on("click", function () {
      Common.showLoadingIndicator();
      let userIdList = new Array();
      selectedUserList.forEach(function (user) {
        userIdList.push(user.shopMemberId);
      });
      NativeBridgeDelegate.inviteUsers(userIdList.join(","));
    });
};

ChatManagementCommon.checkForMakeChat = function (checkMemberID) {
  let findObj = ChatManagementCommon.selectedUserList.find(function (
    shopMemberID
  ) {
    return shopMemberID == checkMemberID;
  });

  if (findObj) {
    // remove
    ChatManagementCommon.selectedUserList =
      ChatManagementCommon.selectedUserList.filter(function (shopMemberID) {
        return checkMemberID != shopMemberID;
      });
    ChatManagementCommon.updateCheckBox(checkMemberID, false);
  } else {
    // add
    ChatManagementCommon.selectedUserList.push(checkMemberID);
    ChatManagementCommon.updateCheckBox(checkMemberID, true);
  }

  const cnt = ChatManagementCommon.selectedUserList.length;
  if (ChatManagementCommon.selectedUserList.length > 0) {
    $(".select_member_num").text(cnt);
  } else {
    $(".select_member_num").text("0");
  }
};

ChatManagementCommon.updateCheckBox = function (checkMemberID, checked) {
  $(".checkbox" + checkMemberID)
    .prop("checked", checked)
    .trigger("change");
};
