package cc.fascinated.bat.command.impl;

import cc.fascinated.bat.command.BatCommand;
import cc.fascinated.bat.command.CommandInfo;
import cc.fascinated.bat.common.EmbedUtils;
import cc.fascinated.bat.common.TimeUtils;
import cc.fascinated.bat.model.BatGuild;
import cc.fascinated.bat.model.BatUser;
import cc.fascinated.bat.service.DiscordService;
import cc.fascinated.bat.service.GuildService;
import cc.fascinated.bat.service.UserService;
import lombok.NonNull;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;

/**
 * @author Fascinated (fascinated7)
 */
@Component
@CommandInfo(name = "botstats", description = "Shows the bot statistics", guildOnly = false)
public class BotStatsCommand extends BatCommand {
    private final GuildService guildService;
    private final UserService userService;
    private final RuntimeMXBean bean = ManagementFactory.getRuntimeMXBean();

    @Autowired
    public BotStatsCommand(@NonNull GuildService guildService, @NonNull UserService userService) {
        this.guildService = guildService;
        this.userService = userService;
    }

    @Override
    public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction interaction) {
        JDA jda = DiscordService.JDA;

        interaction.replyEmbeds(EmbedUtils.genericEmbed().setDescription(
                "**Bot Statistics**\n" +
                        "➜ Guilds: **%s\n".formatted(jda.getGuilds().size()) +
                        "➜ Users: **%s\n".formatted(jda.getUsers().size()) +
                        "➜ Gateway Ping: **%sms**\n".formatted(jda.getGatewayPing()) +
                        "\n" +
                        "**Bat Statistics**\n" +
                        "➜ Uptime: **%s**\n".formatted(TimeUtils.format(bean.getUptime())) +
                        "➜ Cached Guilds: **%s**\n".formatted(guildService.getGuilds().size()) +
                        "➜ Cached Users: **%s**".formatted(userService.getUsers().size())
        ).build()).queue();
    }
}