/*global async, d3*/

function toD3(results) {
	var model = {
		edgeSwitches: [],
		aggregationSwitches: [],
		coreSwitches: [],
		flows: [],
		controllers: results.controllers,
		activeControllers: results.activeControllers,
		links: results.links
	}

	// sort the switches
	results.switches.sort(function (a, b) {
		var aA = a.dpid.split(':');
		var bB = b.dpid.split(':');
		for (var i=0; i<aA.length; i+=1) {
			if (aA[i] != bB[i]) {
				return parseInt(aA[i], 16) - parseInt(bB[i], 16);
			}
		}
		return 0;
	});

	// identify switch types
	var coreSwitchDPIDs = {};
	results.configuration.core.forEach(function (dpid) {
		coreSwitchDPIDs[dpid] = true;
	});

	var aggregationSwitchDPIDs = {};
	results.configuration.aggregation.forEach(function (dpid) {
		aggregationSwitchDPIDs[dpid] = true;
	});

	results.switches.forEach(function (s) {
		s.controller = results.mapping[s.dpid][0].controllerId;

		if (coreSwitchDPIDs[s.dpid]) {
			model.coreSwitches.push(s);
		} else if (aggregationSwitchDPIDs[s.dpid]) {
			model.aggregationSwitches.push(s);
		} else {
			model.edgeSwitches.push(s);
		}
	});

	return model;
}

var urls = {
	links: '/wm/core/topology/links/json',
	switches: '/wm/core/topology/switches/all/json',
	flows: '/wm/flow/getall/json',
	activeControllers: '/wm/registry/controllers/json',
	controllers: 'data/controllers.json',
	mapping: '/wm/registry/switches/json',
	configuration: 'data/configuration.json'
}

var mockURLs = {
	links: 'data/wm_core_topology_links_json.json',
	switches: 'data/wm_core_topology_switches_all_json.json',
	flows: 'data/wm_flow_getall_json.json',
	activeControllers: 'data/wm_registry_controllers_json.json',
	controllers: 'data/controllers.json',
	mapping: 'data/wm_registry_switches_json.json',
	configuration: 'data/configuration.json'
}

var proxyURLs = {
	links: '/proxy/wm/core/topology/links/json',
	switches: '/proxy/wm/core/topology/switches/all/json',
	flows: '/proxy/wm/flow/getall/json',
	activeControllers: '/proxy/wm/registry/controllers/json',
	controllers: 'data/controllers.json',
	mapping: '/proxy/wm/registry/switches/json',
	configuration: 'data/configuration.json'
}

var params = parseURLParameters();
if (params.mock) {
	urls = mockURLs;
}
if (params.proxy) {
	urls = proxyURLs;
}

function makeRequest(url) {
	return function (cb) {
		d3.json(url, function (error, result) {
			if (error) {
				error = url + ' : ' + error.status;
			}

			cb(error, result);
		});
	}
}


function updateModel(cb) {
	async.parallel({
	    links: makeRequest(urls.links),
	    switches: makeRequest(urls.switches),
	    controllers: makeRequest(urls.controllers),
	    activeControllers: makeRequest(urls.activeControllers),
	    mapping: makeRequest(urls.mapping),
	    configuration: makeRequest(urls.configuration)
//	    flows: makeRequest(urls.flows),
	},
	function(err, results) {
		if (!err) {
			var model = toD3(results);
			cb(model);
		} else {
			alert(JSON.stringify(err));
		}
	});
}
