import DateUtils from '../../tools/utilities/DateUtils';
import * as DataEvent from '../../tools/events/DataEvent';
import RightsManager, {
	TASK_CREATE,
	TASK_UPDATE,
	OBJECT_POST,
	OBJECT_SETTINGS
} from '../../tools/utilities/RightsManager';
const express = require('express');
const router = express.Router();
const multer = require('multer');
const fs = require('fs-extra');
const Models = require('../../models');
const dateUtils = new DateUtils();
const rightsManager = new RightsManager();
const uploadPath =
	'./content/user-images/' +
	dateUtils.getDate('year', new Date()) +
	'/' +
	dateUtils.getDate('month', new Date());
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 avatar_upload = multer({
	storage: storage
}).array('avatar_upload');
var background_upload = multer({
	storage: storage
}).array('background_upload');
//** 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_SETTINGS, TASK_UPDATE)) {
			fs.readJson('config/site-settings.json')
				.then(obj => {
					if (user.hande != payload.handle || user.email != payload.email) {
						user.update({
							handle: payload.handle,
							email: payload.email
						})
							.then(() => {
								//console.log('UPDATED');
							})
							.catch(() => {
								//console.log('ERR', err);
							});
					} else {
						//console.log('USER NOT UPDATED');
					}
					obj.url = payload.url;
					obj.title = payload.title;
					obj.description = payload.descriptions;
					obj.private = payload.private;
					obj.theme = payload.theme;
					obj.background = payload.background; //TODO: make this url relative
					//mail stuff
					obj.email.active = payload.mailSettings.activeProtocol;
					obj.email.smtp.domain = payload.mailSettings.smtp.domain;
					obj.email.smtp.email = payload.mailSettings.smtp.email;
					obj.email.smtp.password = payload.mailSettings.smtp.password;
					obj.email.mailgun.domain = payload.mailSettings.mailgun.domain;
					obj.email.mailgun['api-key'] = payload.mailSettings.mailgun.key;
					fs.writeJson('config/site-settings.json', obj)
						.then(() => {
							res.json({
								message: DataEvent.SETTINGS_UPDATED
							});
						})
						.catch(() => {
							//console.error(err);
						});
				})
				.catch(() => {
					//console.error(err);
				});
		} else {
			res.json({
				message: "Nah. You can't do that. Talk to the admin, sport."
			});
		}
	});
});

router.get('/nav', function(req, res) {
	fs.readJson('config/site-settings.json')
		.then(obj => {
			fs.writeJson('config/site-settings.json', obj)
				.then(() => {
					res.json(obj.menu);
				})
				.catch(() => {
					//console.error(err);
				});
		})
		.catch(() => {
			//console.error(err);
		});
});

router.post('/nav-sync', (req, res) => {
	let payload = req.body;
	Models.User.findById(req.session.user.id).then(user => {
		if (rightsManager.check(user.role, OBJECT_SETTINGS, TASK_UPDATE)) {
			fs.readJson('config/site-settings.json')
				.then(obj => {
					obj.menu = payload;
					fs.writeJson('config/site-settings.json', obj)
						.then(() => {
							res.json({
								message: DataEvent.SETTINGS_UPDATED
							});
						})
						.catch(() => {
							//console.error(err);
						});
				})
				.catch(() => {
					//console.error(err);
				});
		} else {
			res.json({
				message: "Nah. You can't do that. Talk to the admin, sport."
			});
		}
	});
});

/***
    UPLOAD AVATAR
*/
router.post('/add-avatar', 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)) {
			avatar_upload(req, res, function(err) {
				if (err) {
					res.json({
						message: err
					});
					throw err;
				} else {
					var avatar = req.files[0].path;
					user.update({
						avatar: avatar.substr(7, avatar.length)
					})
						.then(updated => {
							req.session.user = updated;
						})
						.catch(() => {
							//console.log('ERR', err);
						});
					return res.json({
						message: DataEvent.AVATAR_UPLOADED,
						url: avatar.substr(7, avatar.length)
					});
				}
			});
		} else {
			res.json({
				message: "Nah. You can't do that. Talk to the admin, sport."
			});
		}
	});
});
/***
    UPLOAD FEATURE BACKGROUND
*/
router.post('/add-feature-background', 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)) {
			background_upload(req, res, function(err) {
				if (err) {
					res.json({
						message: err
					});
					throw err;
				} else {
					var bgImage = req.files[0].path;
					return res.json({
						message: DataEvent.SITE_BACKGROUND_UPLOADED,
						url: bgImage.substr(7, bgImage.length)
					});
				}
			});
		} else {
			res.json({
				message: "Nah. You can't do that. Talk to the admin, sport."
			});
		}
	});
});
module.exports = router;
