var express = require('express');
var router = express.Router();
var exec = require('child_process').exec;
var util = require('util');
var fs = require('fs.extra');
var dbRoutes = require('./dbRoutes');
var csp = require('./csp');
var multer = require('multer');
var bodyParser = require('body-parser');
var sax = require('sax'),strict=true,parser = sax.parser(strict);
var async = require('async');
var l_ = require('lodash');
var dateFormat = require('dateformat');
var properties = require(process.env.SDNC_CONFIG_DIR + '/admportal.json');
var vnf = require('./vnf');
var network = require('./network');
var moment = require('moment');

// pass host, username and password to ODL
// target host for ODL request
var username = properties.odlUser;
var password = properties.odlPasswd;
var auth = 'Basic ' + new Buffer(username + ':' + password).toString('base64');
var host = properties.odlHost;
var port = properties.odlPort;

var header = {'Host': host, 'Authorization': auth, 'Content-Type': 'application/json'};
var options = {
        host    : host,
        headers : header,
        port    : port,
        rejectUnauthorized:false,
        strictSSL: false
};

// multer 
var unixTime = moment().unix();
var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, process.cwd() + '/uploads/')
		return;
  },
  filename: function (req, file, cb) {
console.log('filename');
    cb(null, unixTime + "." + file.originalname )
		return;
  }
});

var upload = multer({
	storage: storage,
	fileFilter: function(req,file,cb) {
		var type = file.mimetype;
		if ( type.indexOf('ms-excel') == -1 ) {
			return cb(null,false);
		}
		cb(null,true);
		return;
	}
});

router.post('/uploadVnfCsv', csp.checkAuth, upload.array('filename'), function(req, res)
{
  var msgArray = new Array();
	var privilegeObj = req.session.loggedInAdmin;
	var tasks = [];

	tasks.push ( function(callback) { vnf.go(req,res,callback,''); } );
	tasks.push ( function(arg1,arg2,callback) { formatVnfInsertStatement(arg1,arg2,req,res,callback); } );
  tasks.push( function(arg1, callback) { dbRoutes.addRow(arg1,req,res,callback); } );
	async.waterfall(tasks, function(err,result)
	{	
		if(err){
			msgArray.push(err);
			dbRoutes.getVnfData(req,res,{code:'failure', msg:msgArray},privilegeObj);
			return;
		}
		else {
			msgArray.push('Successfully uploaded file.' );
			dbRoutes.getVnfData(req,res,{code:'success', msg:msgArray},privilegeObj);
			return;
		}
	});
});

router.post('/uploadNetworkCsv', csp.checkAuth, upload.array('filename'), function(req, res)
{
	console.log('uploadNetworkCsv');

	var msgArray = new Array();
	var privilegeObj = req.session.loggedInAdmin;
	var tasks = [];

	tasks.push ( function(callback) { network.go(req,res,callback,''); } );
	tasks.push ( function(arg1,arg2,callback) { formatNetworkInsertStatement(arg1,arg2,req,res,callback); } );
	tasks.push( function(arg1, callback) { dbRoutes.addRow(arg1,req,res,callback); } );
	async.waterfall(tasks, function(err,result)
	{
		if(err){
			console.log('ERROR:' + err);
			msgArray.push(err);
			dbRoutes.getVnfNetworkData(req,res,{code:'failure', msg:msgArray},privilegeObj);
		}
		else {
			msgArray.push('Successfully uploaded file.' );
			dbRoutes.getVnfNetworkData(req,res,{code:'success', msg:msgArray},privilegeObj);
		}
	});
});


function formatVnfInsertStatement(content,filename,req,res,callback)
{
	var newstr = JSON.stringify(content);
	var enc_str = encodeURI(newstr);
	var sql = "INSERT INTO PRE_LOAD_VNF_DATA "
		+ "(filename,preload_data) VALUES ("
		+ "'"+ filename + "',"
		+ "'" + enc_str + "')";

	callback(null,sql);
	return;
}

function formatNetworkInsertStatement(content,filename,req,res,callback)
{
	var newstr = JSON.stringify(content);
	var enc_str = encodeURI(newstr);
	var sql = "INSERT INTO PRE_LOAD_VNF_NETWORK_DATA "
		+ "(filename,preload_data) VALUES ("
		+ "'"+ filename + "',"
		+ "'" + enc_str + "')";

	callback(null,sql);
	return;
}

module.exports = router;