-- LegacyWorlds Beta 6
-- PostgreSQL database scripts
--
-- Game updates - empire resources
--
-- Copyright(C) 2004-2012, DeepClone Development
-- --------------------------------------------------------


/*
 * Empire resources update
 * 
 * For each empire in the update batch, compute the new amount of resources
 * based on the upkeep and income from planets.
 * 
 * FIXME: this should also include fleet upkeeps. This situation will be
 *        resolved once the system is modified to rely solely on resources.
 * 
 * Parameters:
 *		_tick		The identifier of the game update
 */
DROP FUNCTION IF EXISTS sys.process_empire_resources_updates( BIGINT );
CREATE FUNCTION sys.process_empire_resources_updates( _tick BIGINT )
	RETURNS VOID
	STRICT VOLATILE
	SECURITY INVOKER
AS $process_empire_resources_updates$

	UPDATE emp.resources _emp_resources

		SET empres_possessed = CASE
				WHEN _emp_resources.empres_possessed + _pl_resources.pres_income - _pl_resources.pres_upkeep > 0 THEN
					_emp_resources.empres_possessed + _pl_resources.pres_income - _pl_resources.pres_upkeep
				ELSE
					0
				END ,
			empres_owed = CASE
				WHEN _emp_resources.empres_possessed + _pl_resources.pres_income - _pl_resources.pres_upkeep < 0 THEN
					 _pl_resources.pres_upkeep - _emp_resources.empres_possessed - _pl_resources.pres_income 
				ELSE
					0
				END

		FROM sys.updates _upd_sys
			INNER JOIN emp.updates _upd_emp
				ON _upd_emp.update_id = _upd_sys.id
			INNER JOIN emp.planets _emp_planets
				USING ( empire_id )
			INNER JOIN verse.planet_resources _pl_resources
				USING ( planet_id )

		WHERE _upd_sys.last_tick = $1
			AND _upd_sys.status = 'PROCESSING'
			AND _upd_sys.gu_type = 'EMPIRE_RESOURCES'
			AND _emp_resources.empire_id = _upd_emp.empire_id
			AND _emp_resources.resource_name_id = _pl_resources.resource_name_id;

$process_empire_resources_updates$ LANGUAGE SQL;


REVOKE EXECUTE
	ON FUNCTION sys.process_empire_resources_updates( BIGINT )
	FROM PUBLIC;
