var fs = require('fs');
var obj =[];
try{
 obj =	JSON.parse(fs.readFileSync(process.argv[2], 'utf8'));
}catch(err){
}
var dirPath=process.argv[3];
console.log(dirPath);
function getID() {
        return (1+Math.random()*4294967295).toString(16);
}

var filteredArray = obj.filter(function(itm){
  return itm.type == 'tab' ;
});

var tabsArr=filteredArray;
 var files = fs.readdirSync(dirPath);
    for (var i in files) {
       var currentFile = dirPath + '/' + files[i];
	//console.log(currentFile);
       var stats = fs.statSync(currentFile);
try{
	if (stats.isFile()) {
		var moduleName="";
		var methodName="";
		console.log("processing... " + currentFile);
 		var o = JSON.parse(fs.readFileSync(currentFile, 'utf8'));
		for(var idx in o){
			if(o[idx].type == "service-logic"){
				moduleName=o[idx].name;
			} 
			if(o[idx].type == "method"){
				methodName=o[idx].name;
				methodName = methodName.replace("method ","");
			} 
			if(moduleName != "" && methodName != ""){
				break;
			}
		}
		var id  = o[0].z;
		//console.log("tab id:" + id);
		var newId = id;
		var number_of_tabs = 0;
		if(filteredArray != null ){
		 number_of_tabs = filteredArray.length;
		}
		//console.log("number_of_tabs:" + number_of_tabs);
		//console.log("id:" + id);
		if(filteredArray != null  && filteredArray.length > 0){
			for(var i in filteredArray){
				if(filteredArray[i].id == id){
					newId = getID();	
					console.log("Using new id:" + newId);
				}
			}
			for(var idx in o){
				o[idx].z= newId;
				var oldNodeId = o[idx].id;
				var newNodeId = getID();
				o[idx].id= newNodeId;
				for(var k=0;k<o.length;k++){
					if(o[k] != null && o[k].wires != undefined && o[k].wires != null){	
						for(var j=0;o[k].wires[0] != null && j< o[k].wires[0].length;j++){
							if(o[k].wires[0][j] == oldNodeId){
								o[k].wires[0][j]=newNodeId;
							}
							
						}	
					}
				}
			}
		}
        		//"label": "Sheet " + (number_of_tabs + 1),
		var tabObj= {
        		"id": newId,
        		"label": methodName,
        		"type": "tab"
		};
	
		filteredArray.push(tabObj);
		obj.unshift(tabObj);
		for(var idx in o){
			obj.push(o[idx]);
		}
		//console.dir(obj);
	}
}catch(err){
	console.log(err);
}
};
function getCurrentDate(){
                var d = new Date();
                var mm = d.getMonth() + 1;
                var dd =   d.getDate();
                var yyyy = d.getYear() + 1900;
                var hr = d.getHours();
                var min = d.getMinutes();
                var sec = d.getSeconds();
                if(mm<10) mm = "0" + mm;
                if(dd<10) dd = "0" + dd;
                if(hr<10) hr = "0" + hr;
                if(min<10) min = "0" + min;
                if(sec<10) sec = "0" + sec;
                var formatedValue = mm + "-" + dd + "-" + yyyy + "_" + hr + "" + min + "" + sec;
                return formatedValue;
        }
if (fs.existsSync(process.argv[2])) {
	fs.renameSync(process.argv[2],process.argv[2]+ "_" + getCurrentDate());
}
fs.writeFileSync( process.argv[2] + ".new", JSON.stringify(obj));
if (fs.existsSync(process.argv[2] + ".new")) {
	fs.renameSync(process.argv[2] + ".new",process.argv[2]);
}