package fr.Skydust.JdrBot.cmds;

import java.util.*;

import fr.Skydust.JdrBot.bases.command.Command;
import fr.Skydust.JdrBot.bases.command.CommandSpec;
import fr.Skydust.JdrBot.utils.Utils;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;

@CommandSpec(
        name = "r|roll",
        usage = "[NombreDés]d[NombreFaces] OU [NombreFaces]",
        description = "Lance un dé"
)
public class Roll extends Command {
	static Random r = new Random();

    public void call(MessageReceivedEvent e) {
        if (e.getMessage().getContentRaw().split(" ").length != 1)
        {
            String[] args = e.getMessage().getContentRaw().split(" ");

            if (Utils.IsInt(args[1]))
            {
                e.getChannel().sendMessage(e.getMember().getAsMention() + " rolled **" + (1 + r.nextInt((Integer.parseInt(args[1])+1) - 1)) + "**").queue();
            } else if (args[1].contains("d")) {
                if (Utils.IsInt(args[1].split("d")[0]) && Utils.IsInt(args[1].split("d")[1]))
                {
                    int number = Integer.parseInt(args[1].split("d")[0]);
                    int number1 = Integer.parseInt(args[1].split("d")[1]);
                    if (number <= 100)
                    {
                        if (number1 <= 1000)
                        {
                            if (number1 != 1)
                            {
                                String finale = "Les nombres sortis sont les suivants : ";

                                int finalcount = 0;

                                //List<Integer> list = new ArrayList<Integer>();
                                for (int i = 0; i < number; i++)
                                {
                                    int CurrentNumber = (1 + r.nextInt((number1+1) - 1));
                                    //list.add(CurrentNumber);
                                    finalcount += CurrentNumber;

                                    if(i == number-1) {
                                        finale = finale + "**" + CurrentNumber + "**";
                                    } else {
                                        finale = finale + "**" + CurrentNumber + "**, ";
                                    }
                                }

                                //Ranger par ordre decroissant
                                //Collections.sort(list, Comparator.reverseOrder());

                                e.getChannel().sendMessage(e.getMember().getAsMention() + " " + finale + " pour un total de " + finalcount).queue();
                            } else {
                                e.getChannel().sendMessage("Comment as-tu obtenu un dé avec un seul côté !").queue();
                            }
                        }
                        else
                        {
                            e.getChannel().sendMessage("Le nombre de faces doit être en dessous de 1000 !").queue();
                        }
                    }
                    else
                    {
                        e.getChannel().sendMessage("Le nombre de dés doit être en dessous de 100 !").queue();
                    }
                } else {
                    e.getChannel().sendMessage("Il faut un nombre valide !").queue();
                }
            } else {
                e.getChannel().sendMessage("Il faut un nombre valide !").queue();
            }
        }
    }
}
