package bluebot.utils.listeners;

import bluebot.MainBot;
import net.dv8tion.jda.core.JDA;
import net.dv8tion.jda.core.entities.TextChannel;
import net.dv8tion.jda.core.events.guild.GuildJoinEvent;
import net.dv8tion.jda.core.events.guild.GuildLeaveEvent;
import net.dv8tion.jda.core.hooks.ListenerAdapter;
import org.apache.log4j.Logger;

/**
 * @file GuildsListener.java
 * @author Blue
 * @version 0.1
 * @brief Detects when the bot is kicked from a server to prevent malfunctions. Created after a bug report made by sinikebe#2208
 */
public class GuildsListener extends ListenerAdapter {

    private static Logger logger = Logger.getLogger(GuildsListener.class);

    private TextChannel retrieveLogChannel() {
        for(JDA shard : MainBot.getJdaList()) {
            if(shard.getTextChannelById(MainBot.getConfig().getGuildsLogChannelId()) != null) {
                return shard.getTextChannelById(MainBot.getConfig().getGuildsLogChannelId());
            }
        }
        return null;
    }

    @Override
    public void onGuildJoin(GuildJoinEvent event) {
        String addMsg = "Added on server **" +  event.getGuild().getName() + "** (" + event.getGuild().getMembers().size() + " users)" +
                "\n ID : " + event.getGuild().getId() + ", Owner : " + event.getGuild().getOwner().getAsMention();
        retrieveLogChannel().sendMessage(addMsg).queue();
    }

    @Override
    public void onGuildLeave(GuildLeaveEvent event) {
        String rmvMsg = "Removed from server **" +  event.getGuild().getName() + "** (" + event.getGuild().getMembers().size() + " users)" +
                "\n ID : " + event.getGuild().getId() + ", Owner : " + event.getGuild().getOwner().getAsMention();
        retrieveLogChannel().sendMessage(rmvMsg).queue();
        // Deletes prefix to avoid malfunctions - thanks to sinikebe#2208 for reporting the issue
        MainBot.getPrefixes().remove(event.getGuild().getId());
        logger.info("Bot kicked from " + event.getGuild().getName() + "(" + event.getGuild().getId() + ")");
    }
}