import { purgeByUser } from "../actions/tickets/delete.js";
import { callback as statsChannelRemove } from "../reflex/statsChannelUpdate.js";

export const event = "guildBanAdd";

export async function callback(client, ban) {
    await statsChannelRemove(client, ban.user);
    purgeByUser(ban.user.id, ban.guild);
    const { log, NucleusColors, entry, renderUser, renderDelta, getAuditLog } = ban.user.client.logger;
    const auditLog = await getAuditLog(ban.guild, "MEMBER_BAN_ADD");
    const audit = auditLog.entries.filter(entry => entry.target.id === ban.user.id).first();
    if (audit.executor.id === client.user.id) return;
    await client.database.history.create("ban", ban.guild.id, ban.user, audit.executor, audit.reason);
    const data = {
        meta: {
            type: "memberBan",
            displayName: "Member Banned",
            calculateType: "guildMemberPunish",
            color: NucleusColors.red,
            emoji: "PUNISH.BAN.RED",
            timestamp: new Date().getTime()
        },
        list: {
            memberId: entry(ban.user.id, `\`${ban.user.id}\``),
            name: entry(ban.user.id, renderUser(ban.user)),
            banned: entry(new Date().getTime(), renderDelta(new Date().getTime())),
            bannedBy: entry(audit.executor.id, renderUser(audit.executor)),
            reason: entry(audit.reason, audit.reason ? `\n> ${audit.reason}` : "*No reason provided.*"),
            accountCreated: entry(ban.user.createdAt, renderDelta(ban.user.createdAt)),
            serverMemberCount: ban.guild.memberCount
        },
        hidden: {
            guild: ban.guild.id
        }
    };
    log(data);
}
