import DateUtils from '../../tools/utilities/DateUtils';
import StringUtils from '../../tools/utilities/StringUtils';
import * as DataEvent from '../../tools/events/DataEvent';
import sanitize from 'sanitize-html';
import RightsManager, {
	TASK_CREATE,
	TASK_UPDATE,
	OBJECT_POST
} from '../../tools/utilities/RightsManager';
const express = require('express');
const router = express.Router();
const multer = require('multer');
const md = require('markdown-it')('commonmark');
const fs = require('fs-extra');
const Models = require('../../models');
const dateUtils = new DateUtils();
const rightsManager = new RightsManager();
const uploadPath =
	'./content/blog-images/' +
	dateUtils.getDate('year', new Date()) +
	'/' +
	dateUtils.getDate('month', new Date());
const Sequelize = require('sequelize');
const Op = Sequelize.Op;
const _ = require('lodash');
fs.ensureDir(uploadPath, () => {
	//console.log(err) // => null
	// dir has now been created, including the directory it is to be placed in
});
var storage = multer.diskStorage({
	destination: function(req, file, cb) {
		cb(null, uploadPath);
	},
	filename: function(req, file, cb) {
		var splice = file.originalname.split(':');
		cb(null, splice[0]);
	}
});
var feature_upload = multer({
	storage: storage
}).array('feature_image');
var post_upload = multer({
	storage: storage
}).array('post_image');
//** SYNC POSTS */
router.post('/sync', (req, res) => {
	let payload = req.body;
	Models.User.findById(req.session.user.id).then(user => {
		if (rightsManager.check(user.role, OBJECT_POST, TASK_UPDATE)) {
			for (let index = 0; index < payload.length; index++) {
				const item = payload[index];
				Models.FreshPost.findOne({
					where: {
						post: {
							[Op.contains]: {
								uuid: item.post.uuid
							}
						}
					}
				})
					.then(found => {
						let buffed = sanitize(item.post.plaintext, {
							allowedTags: ['del', 'a', 'iframe', 'img'],
							allowedAttributes: {
								a: ['href', 'name', 'target'],
								img: ['src'],
								iframe: [
									'height',
									'width',
									'src',
									'frameborder',
									'allow',
									'allowfullscreen'
								]
							}
						});
						buffed = new StringUtils().decodeHTML(buffed);
						item.post.plaintext = buffed;
						item.post.html = md.render(buffed, {
							html: true,
							xhtmlOut: true
						});
						if (!_.isEqual(item.post, found.post)) {
							found
								.update(item)
								.then(() => {
									//console.log('UPDATED', updated);
								})
								.catch(() => {
									//console.log("***ERROR***", err);
								});
						} else {
							//chilld
						}
					})
					.catch(() => {
						//console.log("***ERRRORZ****", err);
						Models.FreshPost.create(item).then(() => {
							//console.log(fresh)
						});
					});
			}
			res.json({
				message: 'postsSynced'
			});
		} else {
			res.json({
				message: "Nah. You can't do that. Talk to the admin, sport."
			});
		}
	});
});
router.get('/json/:filter?', function(req, res) {
	var filter = req.params.filter;
	Models.FreshPost.findAll({
		order: [['id', 'DESC']]
	})
		.then(function(posts) {
			let newlist = [];
			for (let index = 0; index < posts.length; index++) {
				let item = posts[index].post;
				switch (filter) {
					case 'not-deleted':
						if (typeof item.deleted == 'undefined' || item.deleted == false) {
							newlist.push(posts[index]);
						} else {
							continue;
						}
						break;

					default:
						newlist.push(posts[index]);
						break;
				}
			}
			res.json(newlist);
		})
		.catch(() => {
			//next(err);
		});
});
/***
    POST IMAGE
*/
router.post('/add-post-image', function(req, res) {
	//console.log(req.body);
	if (!req.session.user)
		return res.json({
			message: 'You need to be logged in, champ.'
		});
	Models.User.findById(req.session.user.id).then(user => {
		if (rightsManager.check(user.role, OBJECT_POST, TASK_CREATE)) {
			post_upload(req, res, function(err) {
				if (err) {
					//console.log('Error in Saving Entry: ' + err);
					res.json({
						message: err
					});
					throw err;
				} else {
					var postImage = req.files[0].path;
					return res.json({
						message: DataEvent.POST_IMAGE_ADDED,
						url: postImage.substr(7, postImage.length)
					});
				}
			});
		} else {
			res.json({
				message: "Nah. You can't do that. Talk to the admin, sport."
			});
		}
	});
});
router.post('/add-feature-image', function(req, res) {
	//console.log(req.body);
	if (!req.session.user)
		return res.json({
			message: 'You need to be logged in, champ.'
		});
	Models.User.findById(req.session.user.id).then(user => {
		if (rightsManager.check(user.role, OBJECT_POST, TASK_CREATE)) {
			feature_upload(req, res, function(err) {
				if (err) {
					//console.log('Error in Saving Entry: ' + err);
					res.json({
						message: err
					});
					throw err;
				} else {
					var postImage = req.files[0].path;
					return res.json({
						message: DataEvent.FEATURE_IMAGE_ADDED,
						url: postImage.substr(7, postImage.length)
					});
				}
			});
		} else {
			res.json({
				message: "Nah. You can't do that. Talk to the admin, sport."
			});
		}
	});
});
module.exports = router;
