export const event = 'messageDelete'

export async function callback(client, message) {
    try {
        if (message.author.id == client.user.id) return;
        if (client.noLog.includes(`${message.guild.id}/${message.channel.id}/${message.id}`)) return;
        const { getAuditLog, log, NucleusColors, entry, renderUser, renderDelta, renderChannel } = message.channel.client.logger
        let auditLog = await getAuditLog(message.guild, 'MEMBER_BAN_ADD')
        let audit = auditLog.entries.filter(entry => entry.target.id == message.author.id).first();
        if (audit) {
            if (audit.createdAt - 100 < new Date().getTime()) return;
        }
        message.reference = message.reference || {}
        let content = message.cleanContent
        content.replace(`\``, `\\\``)
        if (content.length > 256) content = content.substring(0, 253) + '...'
        let attachments = message.attachments.size + (message.content.match(/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/gi) ?? []).length
        let attachmentJump = ""
        let config = (await client.database.guilds.read(message.guild.id)).logging.attachments.saved[message.channel.id + message.id];
        if (config) { attachmentJump = ` [[View attachments]](${config})` }
        let data = {
            meta: {
                type: 'messageDelete',
                displayName: 'Message Deleted',
                calculateType: 'messageDelete',
                color: NucleusColors.red,
                emoji: 'MESSAGE.DELETE',
                timestamp: new Date().getTime()
            },
            separate: {
                start: content ? `**Message:**\n\`\`\`${content}\`\`\`` : '**Message:** *Message had no content*',
            },
            list: {
                messageId: entry(message.id, `\`${message.id}\``),
                sentBy: entry(message.author.id, renderUser(message.author)),
                sentIn: entry(message.channel.id, renderChannel(message.channel)),
                deleted: entry(new Date().getTime(), renderDelta(new Date().getTime())),
                mentions: message.mentions.users.size,
                attachments: entry(attachments, attachments + attachmentJump),
                repliedTo: entry(
                    message.reference.messageId || null,
                    message.reference.messageId ? `[[Jump to message]](https://discord.com/channels/${message.guild.id}/${message.channel.id}/${message.reference.messageId})` : "None"
                )
            },
            hidden: {
                guild: message.channel.guild.id
            }
        }
        log(data);
    } catch(e) { console.log(e) }
}
