const Command = require("../../base/Command"),
	Discord = require("discord.js");

class Quote extends Command {
	constructor(client) {
		super(client, {
			name: "quote",
			dirname: __dirname,
			enabled: true,
			guildOnly: true,
			aliases: ["q"],
			memberPermissions: [],
			botPermissions: ["SEND_MESSAGES", "EMBED_LINKS"],
			nsfw: false,
			ownerOnly: false,
			cooldown: 1000
		});
	}

	async run(message, args, data) {
		function embed(m) {
			const embed = new Discord.MessageEmbed()
				.setAuthor({
					name: m.author.tag,
					iconURL: m.author.displayAvatarURL({
						size: 512,
						dynamic: true,
						format: "png"
					})
				})
				.setDescription(m.content)
				.setColor(m.member ? m.member.roles.highest ? m.member.roles.highest.color : data.config.embed.color : data.config.embed.color)
				.setFooter({
					text: m.guild.name + " | #" + m.channel.name
				})
				.setTimestamp(m.createdTimestamp);
			if (m.attachments.size > 0) embed.setImage(m.attachments.first().url);
			return embed;
		}

		const msgID = args[0];
		if (isNaN(msgID)) {
			message.author.send({
				content: message.translate("general/quote:MISSING_ID")
			}).then(() => {
				message.delete();
			}).catch(() => {
				message.error("misc:CANNOT_DM");
			});
			return;
		}

		let channel = args[1];
		if (args[1]) {
			channel = this.client.channels.cache.get(args[1]);
			if (!channel) {
				message.author.send(message.translate("general/quote:NO_MESSAGE_ID")).then(() => {
					message.delete();
				}).catch(() => {
					message.error("misc:CANNOT_DM");
				});
				return;
			}
		}

		if (!channel) {
			message.channel.messages.fetch(msgID).catch(() => {
				message.author.send((message.translate("general/quote:NO_MESSAGE_ID"))).then(() => {
					message.delete();
				}).catch(() => {
					message.error("misc:CANNOT_DM");
				});
				return;
			}).then((msg) => {
				message.delete();
				message.channel.send({
					embeds: [embed(msg)]
				});
			});
		} else {
			channel.messages.fetch(msgID).catch(() => {
				message.author.send(message.translate("general/quote:NO_MESSAGE_ID")).then(() => {
					message.delete();
				}).catch(() => {
					message.error("misc:CANNOT_DM");
				});
				return;
			}).then((msg) => {
				message.delete();
				message.channel.send({
					embeds: [embed(msg)]
				});
			});
		}
	}
}

module.exports = Quote;