const { Command } = require('discord-akairo');
const gm = require('gm');
const fetch = require('node-fetch');
const fs = require('fs');   

class memeCommand extends Command {
	constructor() {
		super('meme', {
			aliases: ['meme', 'caption'],
			category: 'general',
			args: [
				{
					id: 'topText',
					type: 'string',
				},
				{
					id: 'bottomText',
					type: 'string',
				},
				{
					id: 'ImageURL',
					type: 'string',
				}
			],
			description: {
				content: 'Put Impact font on your image (Use quotes for multiples words, it also support gif)',
				usage: '[topText] [bottom text] [GIF url (or as attachment)]',
				examples: ['"hahah look at this" "funny doge" https://cdn.discordapp.com/attachments/586308815868395535/588472173824311306/resize.gif']
			}
		});
	}

	async exec(message, args) {
		let Attachment = (message.attachments).array();
		if (args.ImageURL) {
			fetch(args.ImageURL)
				.catch(err => {
					console.error(err);
					return message.channel.send('An error has occured, is your link valid?');
				})
				.then(res => {
					const dest = fs.createWriteStream('./img/memeInput.gif');
					res.body.pipe(dest);
					dest.on('finish', () => {
						processGif();
					});
				});
		} else if (Attachment[0]) {
			fs.writeFile('./img/memeInput.gif', Attachment[0], 'binary', function(err) {
				if (err) throw err;
				processGif();
			});
		} else {
			return message.channel.send('Please use an image!');
		}

		function processGif() {
			gm('./img/memeInput.gif')
				.stroke('#000000', 0.1)
				.fill('#ffffff')
				/*
				// I have to try to make this work so font can adapt with image
				.size(function(err, size) {
					if (err) throw err;
					if (size.width < 300 ) {
						console.log('ye');
						this.pointSize(10);
					} else {
						console.log('nah');
						this.pointSize(50);
					}
				})
				*/
				.font('/usr/share/fonts/TTF/impact.ttf', 40)
				.drawText(0, 30, args.topText, 'North')
				.drawText(0, 10, args.bottomText, 'South')
				.write('./img/meme.gif', function (err) {
					if (!err) {
						message.channel.send({files: ['./img/meme.gif']});
					} else {
						console.error(err);
					}
				});
		}
	}
}

module.exports = memeCommand;