package de.yannicpunktdee.yoshibot.command.commands;

import de.yannicpunktdee.yoshibot.command.YoshiCommand;
import de.yannicpunktdee.yoshibot.command.YoshiCommandContext;
import de.yannicpunktdee.yoshibot.utils.SauceProvider;
import net.dv8tion.jda.api.entities.MessageEmbed;

import java.util.Arrays;
import java.util.List;

public class SauceCommand extends YoshiCommand {
	/**
	 * Erzeugt ein neues Kommando, führt es aber noch nicht aus. Es wird ermittelt, ob die Argumentenkombination valide
	 * ist und das isOk-Flag gesetzt. Im Fehlerfall wird eine Fehleremeldung spezifiziert.
	 *
	 * @param context Der Kontext mit dem das Kommando aufgerufen wurde.
	 */
	public SauceCommand(YoshiCommandContext context) {
		super(context);
	}
	
	/**
	 * {@inheritDoc}
	 */
	@Override
	public boolean execute() {
		if (!super.execute()) return false;
		if (!context.getEvent().getTextChannel().isNSFW()) {
			sendMessage("Dieser Kanal is nix gut, weil vong nsfw her. Geh woanders hin du kek");
			return true;
		}
		List<String> arguments = Arrays.asList(context.getArgument("tags").split(" "));
		try {
			arguments.stream().map(Integer::parseInt).map(this::byIndex).forEach(this::sendMessage);
		} catch (Exception e) {
			sendMessage(byTags(arguments));
		}
		return true;
	}
	
	private MessageEmbed byIndex(int index) {
		return SauceProvider.getSauce(index);
	}
	
	private MessageEmbed byTags(List<String> tags){
		return SauceProvider.getRandomSauce(String.join(" ", tags));
	}
}
