import { callback as statsChannelAdd } from '../reflex/statsChannelUpdate.js';
import { callback as welcome } from '../reflex/welcome.js';
import log from '../utils/log.js';
import client from '../utils/client.js';

export const event = 'guildMemberAdd'

export async function callback(_, member) {
    try { welcome(_, member); } catch {}
    try { statsChannelAdd(_, member, ); } catch {}
    try {
        const { log, NucleusColors, entry, renderUser, renderDelta } = member.client.logger
        try { await client.database.history.create("join", member.guild.id, member.user, null, null) } catch {}
        let data = {
            meta: {
                type: 'memberJoin',
                displayName: 'Member Joined',
                calculateType: 'guildMemberUpdate',
                color: NucleusColors.green,
                emoji: "MEMBER" + (member.user.bot ? ".BOT" : "") + ".JOIN",
                timestamp: member.joinedTimestamp
            },
            list: {
                memberId: entry(member.id, `\`${member.id}\``),
                name: entry(member.id, renderUser(member.user)),
                joined: entry(member.joinedAt, renderDelta(member.joinedAt)),
                accountCreated: entry(member.user.createdAt, renderDelta(member.user.createdAt)),
                serverMemberCount: member.guild.memberCount,
            },
            hidden: {
                guild: member.guild.id
            }
        }
        log(data);
    } catch {}
}
