const Command = require("../../base/Command");

class Set extends Command {
	constructor(client) {
		super(client, {
			name: "set",
			dirname: __dirname,
			enabled: true,
			guildOnly: true,
			aliases: [],
			memberPermissions: ["MANAGE_GUILD"],
			botPermissions: ["SEND_MESSAGES"],
			nsfw: false,
			ownerOnly: false,
			cooldown: 2000
		});
	}

	async run(message, args) {
		const status = args[0];
		if (!status || !["level", "xp", "credits", "bank"].includes(status)) return message.error("administration/set:NO_STATUS");

		const member = await this.client.resolveMember(args[1], message.guild);
		if (!member) return message.error("administration/set:INVALID_MEMBER");
		if (member.user.bot) return message.error("administration/set:BOT_USER");

		const number = args[2];
		if (!number || isNaN(number) || parseInt(number, 10) < 0) return message.error("administration/set:INVALID_AMOUNT");
		const amount = Math.ceil(parseInt(number, 10));

		const memberData = await this.client.findOrCreateMember({
			id: member.id,
			guildID: message.guild.id
		});

		if (status === "level") {
			memberData.level = parseInt(amount, 10);
			memberData.save();
		} else if (status === "xp") {
			memberData.exp = parseInt(amount, 10);
			memberData.save();
		} else if (status === "credits") {
			memberData.money = parseInt(amount, 10);
			memberData.save();
		} else if (status === "bank") {
			memberData.bankSold = parseInt(amount, 10);
			memberData.save();
		}

		message.success("administration/set:SUCCESS_" + status.toUpperCase(), {
			username: member.user.tag,
			amount
		});
	}
}

module.exports = Set;