--[[----------------------------------------------------------------------------
Хранилище текстовых интерпретаций рангов и функции для работы с ним.
Чугай Александр
------------------------------------------------------------------------------]]

-- ранги. формат: {novice={0,30}, experienced={30,60}, ...}
local stalker_rank_intervals
local monster_rank_intervals

local stalker_max_rank_name
local monster_max_rank_name

local ranks_loaded = false

-- парсит заданную строку рангов в заданную таблицу.
-- возвращает название максимального ранга
function parse_ranks( s, tbl )
	s = "0," .. s .. ",10000"

	local t = parse_names( s )
	local i = 2

	while i < #t do
		tbl[t[i]] = { tonumber(t[i-1]), tonumber(t[i+1]) }
		i = i + 2
	end

	return t[i-2]
end

-- вычитывает сталкерские и монстрячие ранги из game_relations.ltx
function read_all_ranks()
	stalker_rank_intervals = {}
	monster_rank_intervals = {}

	local ltx  = system_ini()

	stalker_max_rank_name = parse_ranks( ltx:r_string( "game_relations", "rating" ),         stalker_rank_intervals )
	monster_max_rank_name = parse_ranks( ltx:r_string( "game_relations", "monster_rating" ), monster_rank_intervals )

	ranks_loaded = true

--	print_table( stalker_rank_intervals )
end

--
function get_rank_name( rank, tbl )
	for name, interval in pairs( tbl ) do
		if rank >= interval[1] and rank < interval[2] then
			return name
		end
	end

	return nil
end

-- возвращает название ранга заданного game_object (персонажа)
function get_obj_rank_name( obj )
	if not ranks_loaded then
		read_all_ranks()
	end

	local obj_rank

	-- HACK
	if obj.m_story_id ~= nil then
		obj_rank = obj:rank()
	else
		obj_rank = obj:character_rank()
	end

	if IsStalker(obj) then
		return get_rank_name( obj_rank, stalker_rank_intervals ) or stalker_max_rank_name
	else
		return get_rank_name( obj_rank, monster_rank_intervals ) or monster_max_rank_name
	end
end

-- возвращает табличку с интервалом рангов для заданного названия интервала
function get_rank_interval( name )
	if not ranks_loaded then
		read_all_ranks()
	end

	return stalker_rank_intervals[name] or monster_rank_intervals[name]
end

