-- DAWS_Package for DCSW -- Enhanced AI - module Suppression fire script
local MainVersion = "2"
local SubVersion = "3"
local Build = "2351"

-- THANKS TO (cronological order):
	-- Rider (AMVI)
	-- Grimes (ED community)
	-- MBot (ED community)
	-- xcom (ED community)
	-- Ian (ED community)
	-- vicx (ED community)
	-- Pikey (ED community)
	-- ESAC_Matador (ED community)


	
-- ################################################################################################################################
-- ################################################################################################################################
-- ################################################################################################################################
-- ################################################################################################################################
-- ################################################################################################################################
-- ################################################################################################################################
-- ################################################################################################################################

	-- local function copy
	local base 						= _G
	local require 					= base.require
	local table 					= base.table
	local math 						= base.math
	local string					= base.string
	local pairs 					= base.pairs
	local ipairs 					= base.ipairs
	local print 					= base.print
	local io 						= base.io
	local lfs 						= base.lfs
	local os 						= base.os
	local zip 						= minizip
	local loadstring 				= base.loadstring
	--]]--
	
	-- common directory listing
	local mistdirectory 			= mistdirectoryDP -- lfs.currentdir() .. "AMVI/Common/Code/"
	local moddirectory 				= moddirectoryAE 	-- lfs.currentdir() .. "AMVI/AIEnhancement/"
	local debugdirectory  			= debugdirectoryAE	--lfs.currentdir() .. "AMVI/AIEnhancement/Debug/"
	local missionfilesdirectory 	= missionfilesdirectoryDP -- lfs.writedir() .. "Missions/"
	local logsdirectory				= logsdirectoryDP -- lfs.writedir() .. "Logs/"
	
	-- common export variables
	local exportfiletype 			= ".csv"
	--reportfiletype 				= ".doc"
	local configfiletype 			= ".csv"
	local tss 						= ";"
	
	--##### INTERNAL VARIABLES

	local debugProcess 				= DAWSdebugProcess -- print information log in dcs.log
	
	--improved random
	do
	   local oldrandom = math.random
	   local randomtable
	   math.random = function ()
		  if randomtable == nil then
			 randomtable = {}
			 for i = 1, 97 do
				randomtable[i] = oldrandom()
			 end
		  end
		  local x = oldrandom()
		  local i = 1 + math.floor(97*x)
		  x, randomtable[i] = randomtable[i], x
		  return x
	   end
	end	

	
-- ################################################################################################################################
-- ################################################################################################################################
-- ################################################################################################################################
-- ################################################################################################################################
-- ################################################################################################################################
-- ################################################################################################################################
-- ################################################################################################################################

	local SuppressedGroups = {}		
	
	--end suppression
	local function SuppressionEnd(id)
		id.ctrl:setOption(AI.Option.Ground.id.ROE , AI.Option.Ground.val.ROE.OPEN_FIRE)
		if debugProcess == true then
			env.info(("DAWS AIE  -  EA_suppression, stopped suppression on : " .. tostring(id.groupName)))
		end	
		--SuppressedGroups[id.groupName] = nil	
		SuppressedGroups[id] = nil			
	end			
	
	--Function to run suppress a group
	local function SuppressGroup(tgt)
		local delay = math.random()*30+15	--Time in seconds the group of a hit unit will be unable to fire				
		local id = {
			groupName = tgt:getGroup():getName(),
			ctrl = tgt:getGroup():getController(),
			endTime = timer.getTime() + delay
		}				
		if SuppressedGroups[id] == nil then
			timer.scheduleFunction(SuppressionEnd, id, id.endTime)
			id.ctrl:setOption(AI.Option.Ground.id.ROE , AI.Option.Ground.val.ROE.WEAPON_HOLD)
			if debugProcess == true then
				env.info(("DAWS AIE  -  EA_suppression, started suppression on : " .. tostring(id.groupName) .. " for " .. delay .. " sec"))
			end						
		else
			if debugProcess == true then
				env.info(("DAWS AIE  -  EA_suppression, suppression already activ on : " .. tostring(id.groupName)))
			end					
		end
	end			

	SuppressionHandler = {}
	function SuppressionHandler:onEvent(event)
		if event.id == world.event.S_EVENT_HIT then				
			local tgt = event.target
			local init = event.initiator			
			local wpn = event.weapon			
			if init and wpn and tgt then
				local wpnCat = wpn:getCategory()
				local wpnType = wpn:getTypeName() -- needed to exclude vikhrs, seen by the sim as rockets				
				local initName = init:getGroup():getName()
				
				if debugProcess == true then
					env.info(("DAWS AIE  -  EA_suppression, evaluating hit of " .. tostring(wpnCat) .. ", type " .. tostring(wpnType) .. ", from " .. tostring(initName)))
				end
				
				if wpnCat and wpnType and initName then
					if init:hasAttribute("Planes") or init:hasAttribute("Helicopters") or init:hasAttribute("Artillery") or init:hasAttribute("MLRS") then
						if wpnType ~= "weapons.missiles.Vikhr_M" then
							if wpnCat == 0 or wpnCat == 2 then -- weapon must be rockets or shell					
								if tgt:hasAttribute("LightArmoredUnits") == true or tgt:hasAttribute("NonArmoredUnits") == true or tgt:hasAttribute("NonAndLightArmoredUnits") == true then
									SuppressGroup(tgt)
								end
							end
						end
					end
				end
			end
		end
	end
	world.addEventHandler(SuppressionHandler)			

	env.info(("DAWS AI Enhancement - Suppression fire pack version: " .. MainVersion .. "." .. SubVersion .. "." .. Build .. " loaded"))
	-- ~=
	
