package me.despawningbone.discordbot.command.misc;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.EnumSet;
import java.util.List;

import me.despawningbone.discordbot.command.Command;
import me.despawningbone.discordbot.command.CommandResult;
import me.despawningbone.discordbot.command.CommandResult.CommandResultType;
import net.dv8tion.jda.api.utils.messages.MessageCreateBuilder;
import net.dv8tion.jda.api.utils.messages.MessageCreateData;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.Message.MentionType;
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
import net.dv8tion.jda.api.entities.User;

public class Say extends Command {  //DONE rewrite to say who echoed it, or even disable it for now  //reenabled it with MESSAGE_MANAGE perms; not my fault if server owners decided to allow people to (ab)use it lmao

	List<String> FilterWords = new ArrayList<String>(
			Arrays.asList("fuck", "shit", "cunt", "pussy", "penis", "whore", "rape", "faggot", "nigga"/*, "gay"*/));  //this is 2020 we cant disallow people saying gay LOL
	List<String> BotPrefix = new ArrayList<String>(Arrays.asList("!", ".", "++", "_", "-", "?"));

	public Say() {
		this.desc = "Make the bot say something!";
		this.usage = "<message>";
		this.perms = EnumSet.of(Permission.MESSAGE_MANAGE);
	}

	@Override
	public CommandResult execute(TextChannel channel, User author, Message msg, String[] args) {
		MessageCreateBuilder smsg = new MessageCreateBuilder();
		String[] spmsg = msg.getContentRaw().split(" ", 3);
		if (args.length < 1) {
			return new CommandResult(CommandResultType.INVALIDARGS, "Say something -.-");
		}
		boolean noappend = false;
		int fcount = 0;
		int ecount = 0;
		if (msg.getContentDisplay().toLowerCase().contains("pen is")) {
			ecount = 1;
		}
		if(!msg.getMentions().getMentions(MentionType.values()).isEmpty() || msg.getContentStripped().contains("@everyone")) {
			return new CommandResult(CommandResultType.FAILURE,  "Please don't echo tags.");
		}

		for (int t = 0; t < FilterWords.size(); t++) {
			String trimmedmsg = msg.getContentDisplay().replaceAll("\\s", "");
			if (trimmedmsg.toLowerCase().contains(FilterWords.get(t))) {
				fcount++;
			}
		}
		// System.out.println(fcount);
		if (fcount - ecount != 0) {
			return new CommandResult(CommandResultType.FAILURE, "You are not permitted to do so.");
		}
		for (int c = 0; c < BotPrefix.size(); c++) {
			if (spmsg[2].startsWith(BotPrefix.get(c))) {
				smsg.addContent("\\" + spmsg[2]);
				noappend = true;
				break;
			}
		}
		if (!noappend) {
			smsg.addContent(spmsg[2]);
		}
		String content = smsg.getContent();
		MessageCreateBuilder fbmsg = new MessageCreateBuilder();
		if (content.toLowerCase().contains("https://") || content.toLowerCase().contains("https://")) {
			String[] wsplit;
			String[] tmpsplit;
			if (content.toLowerCase().contains("https://")) {
				wsplit = content.split("https://");
				fbmsg.addContent(wsplit[0]);
				tmpsplit = wsplit[1].split(" ");
				fbmsg.addContent("<https://" + tmpsplit[0] + "> ");
			} else {
				wsplit = content.split("http://");
				fbmsg.addContent(wsplit[0]);
				tmpsplit = wsplit[1].split(" ");
				fbmsg.addContent("<http://" + tmpsplit[0] + "> ");
			}
			for (int i = 0; i < tmpsplit.length - 1; i++) {
				fbmsg.addContent(tmpsplit[i + 1] + " ");
			}
		} else {
			fbmsg.addContent(content);
		}
		//fbmsg.addContent("\n- " + author.getName() + "#" + author.getDiscriminator());  hey they have message manage perms whatever
		MessageCreateData fmsg = fbmsg.build();
		channel.sendMessage(fmsg).queue();
		return new CommandResult(CommandResultType.SUCCESS, "Message echoed: " + fbmsg.getContent());
	}
}
