/**
 * Compare constructions given a group
 */
function Comparison(group)
{	
	var calculation_rate = group.get_setting("calculation_rate").get_active_value();
	
	var extract_information = function() {
		var min_cost = Infinity;
		var max_cost = 0;
		var min_construction = undefined;
		var max_construction = undefined;
		
		var shortest_lifetime_max = 0;
		var shortest_lifetime_min = 0;
		
		var constructions = group.get_constructions();
		for (var i = 0; i < constructions.length; i++) {
			var calculator = new Calculator(constructions[i]);
			var results = calculator.calculate_construction();
			
			if (results == undefined || results.main.lifetime == 0) continue;
			
			if (results.main.yearly_cost > max_cost) {
				max_cost = results.main.yearly_cost;
				shortest_lifetime_max = results.main.lifetime.calculated;
				max_construction = constructions[i];
			}
			if (results.main.yearly_cost < min_cost) {
				min_cost = results.main.yearly_cost;
				shortest_lifetime_min = results.main.lifetime.calculated;
				min_construction = constructions[i];
			}
		}
		
		if (max_cost == 0 || min_cost == Infinity) {
			return undefined;
		}
		
		return {
			"shortest_lifetime": Math.min(shortest_lifetime_min, shortest_lifetime_max),
			"difference": {
				"min": { "construction": min_construction, "cost": min_cost },
				"max": { "construction": max_construction, "cost": max_cost }
			}
		}
	}
	
	/**
	 * Analyze on the given variables and return result
	 */
	this.analyze = function() {
		if (group.get_constructions().length == 0) return ;
		
		var info = extract_information();
		if (info == undefined) return undefined;
		
		// Calculation
		var cost_diff = info.difference.max.cost - info.difference.min.cost;
		
		var rate = Math.pow(1 + calculation_rate, info.shortest_lifetime);
		var nowvalue_constant = (rate - 1) / (rate * calculation_rate);
		var nowvalue = Math.round(nowvalue_constant * cost_diff);
		
		return {
			"constructions": info,
			"calculation_rate": calculation_rate,
			"nowvalue": nowvalue
		};
	};
}
