package de.yannicpunktdee.yoshibot.command.commands;

import de.yannicpunktdee.yoshibot.command.YoshiCommand;
import de.yannicpunktdee.yoshibot.command.YoshiCommandContext;
import de.yannicpunktdee.yoshibot.main.YoshiBot;
import de.yannicpunktdee.yoshibot.utils.Logger;
import de.yannicpunktdee.yoshibot.utils.RestHelper;
import org.json.JSONObject;

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

public class WikipediaCommand 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 WikipediaCommand(YoshiCommandContext context) {
		super(context);
	}
	
	@Override
	public boolean execute() {
		if (!super.execute()) return false;
		
		String url = "https://de.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro&explaintext" +
					 "&redirects&titles=" + context.getArgument("name");
		
		JSONObject articleBase = new JSONObject(RestHelper.getFromURL(url));
		JSONObject pages = articleBase.getJSONObject("query").getJSONObject("pages");
		if (pages.has("-1")) {
			sendErrorMessage("Kein Artikel namens " + context.getArgument("name") + " gefunden!");
			Logger.logWarning("Konnte Artikel " + context.getArgument("name") + " nicht finden!");
		}
		assert pages.keySet().stream().findFirst().isPresent();
		JSONObject page = pages.getJSONObject(pages.keySet().stream().findFirst().get());
		
		String text = page.getString("extract");
		sendMessage(text);
		List<String> parts = Arrays.asList(text.split(" "));
		text = String.join(" ", parts.subList(0, Math.min(parts.size(), 50)));

		return YoshiBot.getInstance().sayTTS(text, getVoiceChannelByParam());
	}
}
