const { Command } = require('discord-akairo');
const ytdl = require('ytdl-core');

class playCommand extends Command {
	constructor() {
		super('play', {
			aliases: ['play'],
			category: 'utility',
			clientPermissions: ['SEND_MESSAGES', 'SPEAK', 'CONNECT'],
			args: [
				{
					id: 'ytblink',
					type: 'string',
					prompt: {
						start: 'Send the link of which video you want to play',
					},
					match: 'rest',
				}
			],
			description: {
				content: 'play music from the link you send ( WIP & very basic at the moment )',
				usage: '[youtube link]',
				examples: ['https://www.youtube.com/watch?v=mzHWLLn5Z4A']
			}
		});
	}

	async exec(message, args) {
		if(!message.channel.permissionsFor(this.client.user).has('CONNECT')) return message.channel.send('Im missing the required permissions for this command!, `VOICE_JOIN_CHANNEL`');
		const voiceChannel = message.member.voice.channel;

		//  If not in voice channel ask user to join
		if (!voiceChannel) {
			return message.reply('please join a voice channel first!');
						
		} else 
		//  If user say "stop" make the bot leave voice channel
		if (args.ytblink == 'stop') {
			voiceChannel.leave();
			return message.channel.send('I left the channel');
		} else
			voiceChannel.join().then(connection => {
				const stream = ytdl(args.ytblink, { filter: 'audioonly' });
				const dispatcher = connection.play(stream);
				message.channel.send('Playing it now!');
				//  End at then end of the audio stream
				dispatcher.on('end', () => {
					voiceChannel.leave();
					return message.channel.send('Music ended, i left the channel');
				});
			})
				.catch(err => {
					console.error(err);
					voiceChannel.leave();
					return message.channel.send('An error has occured! is the link you sent valid?');
				});
	}
}

module.exports = playCommand;
