-- In this file we define functions that serves for game config windows


------------------------------------------------------------------------------------------------------------
-- create the game namespace without reseting if already created in an other file.
if (game==nil) then
	game= {};
end

-- init the temp space for color picker
if (game.ColorPicker == nil) then
	game.ColorPicker = {};
	game.ColorPicker.r = 255;
	game.ColorPicker.g = 255;
	game.ColorPicker.b = 255;
	game.ColorPicker.button = nil;
	game.ColorPicker.pal = 0;
end

------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------
-- WIDGET TO CHOOSE A COLOR
------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------
-- called when we click a button to choose a color from
function game:mcwChooseColor(title, pal)

	local ui = getUICaller();

	-- get the color of the button and store it in temporary db location
	local rgba = ui.col_normal_rgba;
	game.ColorPicker.r = rgba.R;
	game.ColorPicker.g = rgba.G;
	game.ColorPicker.b = rgba.B;
	game.ColorPicker.button = ui;
	game.ColorPicker.pal = pal;

	-- setup the color picker window
	local uiModalWin = getUI('ui:interface:define_mcw_color');
	if (game.ColorPicker.pal == 0) then
		uiModalWin.pick.r = rgba.R;
		uiModalWin.pick.g = rgba.G;
		uiModalWin.pick.b = rgba.B;
		uiModalWin.pick.active = true;
		uiModalWin.pick2.active = false;
	else
		uiModalWin.pick2.r = rgba.R;
		uiModalWin.pick2.g = rgba.G;
		uiModalWin.pick2.b = rgba.B;
		uiModalWin.pick.active = false;
		uiModalWin.pick2.active = true;
	end
	uiModalWin.text.hardtext = title;

	game.mcwOnColorChanged();

	-- launch the color picker modal window
	runAH(ui, 'push_modal', 'group=ui:interface:define_mcw_color');
end

------------------------------------------------------------------------------------------------------------
-- called when we have finished choosing the color in the modal window and the chosen color is valid
function game:mcwValidateColor()

	if (game.ColorPicker.button == nil) then
		return;
	end
	game.ColorPicker.button.col_normal = game.ColorPicker.r .. ' ' .. game.ColorPicker.g .. ' ' .. game.ColorPicker.b;
	--debugInfo(game.ColorPicker.button.col_normal)
	game.ColorPicker.button.col_over = game.ColorPicker.button.col_normal;
	game.ColorPicker.button.col_pushed = game.ColorPicker.button.col_normal;
	runAH(game.ColorPicker.button, 'ddx_color', '');
	runAH(game.ColorPicker.button, 'leave_modal', '');
end

------------------------------------------------------------------------------------------------------------
-- called when the color changed
function game:mcwOnColorChanged()

	local uiPath = 'ui:interface:define_mcw_color:';
	if (game.ColorPicker.pal == 0) then
		uiPath = uiPath .. 'pick';
	else
		uiPath = uiPath .. 'pick2';
	end

	local ui = getUI(uiPath);
	game.ColorPicker.r = ui.r;
	game.ColorPicker.g = ui.g;
	game.ColorPicker.b = ui.b;

	local uiModalWin = getUI('ui:interface:define_mcw_color');
	uiModalWin.color = game.ColorPicker.r .. ' ' .. game.ColorPicker.g .. ' ' .. game.ColorPicker.b;
	uiModalWin.text.color = uiModalWin.color;
end

------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------
-- CONFIG WINDOW
------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------


------------------------------------------------------------------------------------------------------------
-- hide all the pages of the config window
function game:configHideAll()

	local	uiList = {
		'explanation', 'general', 'landscape', 'fx', 'char', 'hud', 'language', 'alpha_colors',
		'chat_colors', 'entity_colors', 'in_scene_user', 'in_scene_friend', 'in_scene_enemy',
		'in_scene_chat_messages', 'win_colors', 'win_colors_r2', 'mouse', 'keyb', 'vr', 'sound', 'landmark_colors', 'help'
	};

	for k,v in pairs(uiList) do
		local uiGrp = getUI('ui:interface:game_config:content:' .. v);
		uiGrp.active = false;
	end
end

------------------------------------------------------------------------------------------------------------
-- show one of the multiple pages in the config window
function game:configShowOne(strUIToShow)

	game:configHideAll();
	-- special case : if the display tab was shown, update the aspect ratio if needed
	local generalGrp = getUI('ui:interface:game_config:content:general');
	local uiGrp = getUI('ui:interface:game_config:content:' .. strUIToShow);
	-- Removed the following code to solve RT n14720
	-- The 'game_config_change_screen_ratio_custom' action handler
	-- should only be called if the user changed the apect ratio himself
	-- (else the edit box containing the aspect ratio may not have been initiliazed here)
	--if uiGrp ~= generalGrp then
	--	runAH(nil, 'game_config_change_screen_ratio_custom', '')
	--end
	uiGrp.active = true;
end

------------------------------------------------------------------------------------------------------------
--
function game:configInit()

	-- init language
	local lang = getClientCfg('LanguageCode');
	local langNb = 0;

	if (lang == 'de') then
		langNb = 2;
	elseif (lang == 'fr') then
		langNb = 1;
	elseif (lang == 'ru') then
		langNb = 3;
	elseif (lang == 'es') then
		langNb = 4;
	end

	-- force observers call
	setDbProp('UI:TEMP:LANGUAGE', -1);
	setDbProp('UI:TEMP:LANGUAGE', langNb);

	runAH(nil, 'game_config_init', '');

	local r2WinOn = false
	if r2 ~= nil then
		if r2.Mode ~= "r2ed_anim_test" then
			r2WinOn = true
		end
	end
	local win = getUI("ui:interface:game_config")

	local dy = -24

	local function winActive(name, active)
		local win = win:find(name)
		win.active = active
		if not active then
			win.y = 0
		else
			win.y = dy
			dy = -4
		end
	end

	winActive("wc_r2_palette", r2WinOn)
	winActive("wc_r2_scenario", r2WinOn)
	winActive("wc_r2_prop_window", r2WinOn)
	winActive("wc_r2_form", r2WinOn)
	winActive("wc_r2_custom_look", r2WinOn)
	winActive("wc_r2_dialogs", r2WinOn)
	winActive("wc_r2_events", r2WinOn)
	winActive("wc_r2_activities", r2WinOn)
	winActive("wc_r2_feature_help", r2WinOn)
	winActive("wc_r2_connect", not r2WinOn)
	winActive("wc_r2_session_browser", not r2WinOn)
	winActive("wc_r2_scenario_control", true)
	winActive("wc_r2_player_tracking", r2WinOn)
end
