const moment = require("moment-timezone");

module.exports.config = {
  name: "log-to-admin-full",
  version: "1.0.0",
  credits: "『𝕽𝖊𝖒』 ✎",
  description: "Ghi lại mọi hoạt động bot và gửi về box admin",
  envConfig: { enable: true },
};

module.exports.run = async function({ api, event, Users, Threads }) {
  const botID = api.getCurrentUserID();
  const logger = require("../../utils/log");
  const time = moment.tz("Asia/Ho_Chi_Minh").format("DD/MM/YYYY HH:mm:ss");

  const sendAdmin = async (text) => {
    try {
      await api.sendMessage(text, global.config.box_admin);
    } catch (e) {
      logger(text, "[Logging Event]");
    }
  };

  const nameUser = global.data.userName.get(event.author) || await Users.getNameUser(event.author);

  // ===== NHÓM =====
  if (event.threadID && event.logMessageType) {
    const threadInfo = await api.getThreadInfo(event.threadID);
    const threadName = threadInfo.threadName || "Tên không tồn tại";
    const threadMem = threadInfo.participantIDs.length;
    const pd = threadInfo.approvalMode ? "Bật" : "Tắt";
    const qtv = threadInfo.adminIDs.length;
    const icon = threadInfo.emoji || "Không sử dụng";

    let task = "";

    switch (event.logMessageType) {
      case "log:thread-name": {
        const newName = event.logMessageData.name || "Tên không tồn tại";
        task = `Người dùng thay đổi tên nhóm thành: ${newName}`;
        await Threads.setData(event.threadID, { name: newName });
        break;
      }
      case "log:subscribe": {
        if (event.logMessageData.addedParticipants.some(i => i.userFbId == botID)) {
          task = `Người dùng đã thêm bot vào nhóm: ${threadName}`;
        }
        break;
      }
      case "log:unsubscribe": {
        if (event.logMessageData.leftParticipantFbId == botID) {
          if (event.senderID == botID) return;
          const data = (await Threads.getData(event.threadID)).data || {};
          data.banned = true;
          const reason = "Kích bot tự do, không xin phép";
          data.reason = reason;
          data.dateAdded = time;
          await Threads.setData(event.threadID, { data });
          global.data.threadBanned.set(event.threadID, { reason: data.reason, dateAdded: data.dateAdded });
          task = "Người dùng đã kick bot ra khỏi nhóm!";
        }
        break;
      }
      default: break;
    }

    if (task.length > 0) {
      const formReport = `|› Tên nhóm: ${threadName}
|› TID: ${event.threadID}
|› Số thành viên: ${threadMem}
|› Phê duyệt: ${pd}
|› Quản trị viên: ${qtv}
|› Biểu tượng cảm xúc: ${icon}
──────────────────
|› Hành động: ${task}
|› Người thực hiện: ${nameUser}
|› UID: ${event.author}
|› Link FB: https://www.facebook.com/profile.php?id=${event.author}
──────────────────
⏰️=『${time}』=⏰️`;
      return sendAdmin(formReport);
    }
  }

  // ===== CÁ NHÂN =====
  if (event.type === "friendRequestAccept") {
    const userID = event.userID;
    const nameUserFriend = await Users.getNameUser(userID);
    const formReport = `Người dùng vừa kết bạn với bot!
|› Tên: ${nameUserFriend}
|› UID: ${userID}
|› Link FB: https://www.facebook.com/profile.php?id=${userID}
⏰️=『${time}』=⏰️`;
    return sendAdmin(formReport);
  }

  // ===== ADMIN BỊ TAG =====
  if (event.type === "message" && event.mentions) {
    const adminTags = Object.keys(event.mentions).filter(uid => global.config.adminIDs.includes(uid));
    if (adminTags.length > 0) {
      const senderName = await Users.getNameUser(event.senderID);
      const taggedNames = adminTags.map(uid => event.mentions[uid].replace(/\n/g," ")).join(", ");
      const formReport = `Người dùng ${senderName} vừa tag admin trong nhóm!
|› Nội dung tin nhắn: ${event.body}
|› Người bị tag: ${taggedNames}
|› UID người gửi: ${event.senderID}
|› Link FB: https://www.facebook.com/profile.php?id=${event.senderID}
⏰️=『${time}』=⏰️`;
      await sendAdmin(formReport);
    }
  }

  // ===== ADMIN REPLY TIN NHẮN CÓ TAG =====
  if (event.type === "message" && event.messageReply) {
    const senderID = event.senderID;
    if (global.config.adminIDs.includes(senderID)) {
      const replyContent = event.body || "Không có nội dung";
      const repliedMessage = event.messageReply.body || "";
      const repliedMentions = event.messageReply.mentions || {};

      const taggedAdmins = Object.keys(repliedMentions).filter(uid => global.config.adminIDs.includes(uid));
      if (taggedAdmins.length > 0) {
        const senderName = await Users.getNameUser(senderID);
        const taggedNames = taggedAdmins.map(uid => repliedMentions[uid].replace(/\n/g," ")).join(", ");

        const formReport = `Admin ${senderName} vừa reply tin nhắn có tag admin!
|› Nội dung reply: ${replyContent}
|› Tin nhắn trước đó: ${repliedMessage}
|› Người bị tag trước đó: ${taggedNames}
|› UID admin: ${senderID}
|› Link FB: https://www.facebook.com/profile.php?id=${senderID}
⏰️=『${time}』=⏰️`;

        return sendAdmin(formReport);
      }
    }
  }
};
