package stream.flarebot.flarebot.commands.informational;

import net.dv8tion.jda.core.EmbedBuilder;
import net.dv8tion.jda.core.entities.Member;
import net.dv8tion.jda.core.entities.Message;
import net.dv8tion.jda.core.entities.TextChannel;
import net.dv8tion.jda.core.entities.User;
import stream.flarebot.flarebot.FlareBot;
import stream.flarebot.flarebot.commands.Command;
import stream.flarebot.flarebot.commands.CommandType;
import stream.flarebot.flarebot.objects.GuildWrapper;
import stream.flarebot.flarebot.permissions.Permission;
import stream.flarebot.flarebot.util.Constants;
import stream.flarebot.flarebot.util.MessageUtils;
import stream.flarebot.flarebot.util.general.FormatUtils;

import java.awt.Color;
import java.util.stream.Collectors;

public class BetaCommand implements Command {

    @Override
    public void onCommand(User sender, GuildWrapper guild, TextChannel channel, Message message, String[] args, Member member) {
        String betaInfo =
                FormatUtils.formatCommandPrefix(guild, FlareBot.getCommandManager().getCommands()
                        .stream()
                        .filter(Command::isBetaTesterCommand)
                        .map(c -> "`{%}" + c.getCommand() + "` - " + c.getDescription())
                        .collect(Collectors.joining("\n")));
        String betaMessage = guild.hasBetaAccess() ?
                "Thank you for being apart of our beta program! Please report any bugs or give us suggestions over at the [support discord](" + Constants.INVITE_URL + ")!"
                : "Listed below are the commands you can gain access to by being a part of our beta program! To join the beta program, you will either need to win " +
                "beta access through a giveaway (Make sure you are in the [support server](" + Constants.INVITE_URL + ") to hear of these!) or you can become apart of the " +
                "Donator tier or higher on our [patreon page](https://www.patreon.com/flarebot)!";
        EmbedBuilder builder = MessageUtils.getEmbed(sender);
        builder.setColor(Color.CYAN);
        builder.setDescription(betaMessage);
        builder.addField("Beta Commands", betaInfo, false);
        channel.sendMessage(builder.build()).queue();
    }

    @Override
    public String getCommand() {
        return "beta";
    }

    @Override
    public String getDescription() {
        return "Shows all the beta commands";
    }

    @Override
    public String getUsage() {
        return "`{%}beta` - Shows the beta information";
    }

    @Override
    public Permission getPermission() {
        return null;
    }

    @Override
    public CommandType getType() {
        return CommandType.INFORMATIONAL;
    }
}