-- модуль реализующий фиолетовый тотем
totems_widget = totems_widget or {}
totems_widget._totem_effect_create_functions = totems_widget._totem_effect_create_functions or {}
totems_widget._totem_load_options_functions = totems_widget._totem_load_options_functions or {}

-- настрйоки тотема
totems_widget._violet_totem_options = {
	start_fly_pos = sf.misc.FloatVector(0, 0), -- позиция откуда летит бонус
	fly_time = 300                             -- время полета бонуса
}

-- функция загрузки специфичных для тотема параметров
totems_widget._totem_load_options_functions[s11.CFieldCap.CapTypeViolet] = function (_totems_info)
	local options = totems_widget._violet_totem_options
	options.start_fly_pos = totems_widget.GetAbsOffset(StringToFloatVector(_totems_info.GetValue("start_fly_pos").c_str()))
	options.fly_time = tonumber(_totems_info.GetValue("fly_time").c_str()) or 0
end

--- функция созданяи эффекта фиолетового тотемоа
totems_widget._totem_effect_create_functions[s11.CFieldCap.CapTypeViolet] = function ()
    local new_child_effect = 
    {
		_options = totems_widget._violet_totem_options,
		
        Init = function(_self, _work_info)
			
			_self._end_time = totems_widget._totem_work_time + totems_widget.effects_timer.Get().GetTime()

			-- список бонусов, которые будут добавлены
			local new_bonuses_list = {}
			
			-- добавлеям в этот список необходимое количество слабых бонусов
			_self._GetRandomBonuses(new_bonuses_list, totems_widget._weak_bonuses_list, _work_info.perk1)

			-- добавляем в этот список необходимое количество сильных бонусов
			_self._GetRandomBonuses(new_bonuses_list, totems_widget._strong_bonuses_list, _work_info.perk2)

			-- обходим получившийся список 
			for _,o in pairs(new_bonuses_list) do
				-- создаем эффект добваления для каждого бонуса
				-- ищем ячейку куда можно добавить бонус
				local cell = s11.game_helpers.GetRandomCellForBonus(game_window.game_field)
				-- если ячейка не найдена 
				if not cell then 
				    -- то не добавляем оставшиеся бонусы, так как ячеек куда можно добавить нет
					break
				end
				-- если все нормально добавляем очередной бонус на найденнуж ячекй
				effects_widget.AddBonusToCell(cell, o, _self._options.fly_time, _self._options.start_fly_pos)
			end
        end,
		
		-- метод для добавления рандомных бонусов в списко добавляемых
		_GetRandomBonuses = function(_target_list, _bonuses_list, _add_count)
			-- если в списке бонусов из которого добавляем есть бонусы
			local bonuses_list_size = #_bonuses_list
			if bonuses_list_size == 0 then
				return
			end
			-- то добавялем случайны бонусы из этого списка в целевой
			for i = 1, _add_count do
				table.insert(_target_list, _bonuses_list[random(1, bonuses_list_size)])
			end
		end,

        Draw = function(_self, _renderer)
        end,

        Update = function(_self, _time)
            if _time > _self._end_time then
                _self:InstantApply()
            end
        end,

        InstantApply = function(_self)
		
            _self._is_dead = true
        end,
		
		IsDead = function(_self)
			return _self._is_dead
		end,
    }
    return new_child_effect
end
