--[[
	This function creates a meteor in a random room with windows, breaching a number of them, as well as the room.
	This is also where monsters would be spawned, if the spawn line of code were to be commented out. 
]]

local ServerStorage = game:GetService("ServerStorage")
local ReplicatedStorage = game:GetService("ReplicatedStorage")

local TableUtils = require(ReplicatedStorage.Dependencies.LuaUtils.TableUtils)
local RoomManager = require(ServerStorage.Source.Managers.RoomManager)
local Constants = require(ReplicatedStorage.Source.Common.Constants)
local MonsterManager = require(ServerStorage.Source.Managers.MonsterManager)

local monstersEnabled = ReplicatedStorage.MonstersEnabled.Value

math.randomseed(tick())

return function()
	local rooms = RoomManager.getRooms()

	local roomsWithWindows =
		TableUtils.filter(
		rooms,
		function(room)
			if #room:getWindows() > 0 then
				return true
			end
		end
	)

	if #roomsWithWindows > 0 then
		local room = roomsWithWindows[math.random(1, #roomsWithWindows)]
		local windows = room:getWindows()
		local windowsToBreak = math.random(1, #windows)

		for i = 1, windowsToBreak do
			local window = windows[i]

			if not window then
				return
			end

			if window:getState() == Constants.State.Window.Normal then
				window:breach()
			else
				windowsToBreak = windowsToBreak + 1
			end
		end

		if monstersEnabled then
			MonsterManager.spawnMonsterInRoom(room)
		end
	end
end
