.namespace Closeup

--timer pour le skip des enigmes
g_skiptimer = nil
g_utbackground = {}
g_closeuptype = ""
function OnEnable(closeup)
	
	g_closeuptype = closeup
	g_screenname = string.lower(string.sub(self.Name,0,3))
	OPLog.Log("On enable "..self.Name)
	interfaceclsp.Enabled = true
	Inventory_bg.Enabled = true
	skip_progress.Position_X = -154
	-- On Active l'interface en fonction du type de closeup
	if closeup ~= "MiniGame" then
		close_up_reload.Enabled = false
		skip_parent.Enabled = false
		close_up_rules.Enabled = false
		if closeup == "Search" then
			LeftInterface.Enabled = true
			g_utbackground = OPUnitFactory.GetUnit(self.Name.."_background","Background")
			ObjectManager.BuildObjects(g_screenname.."_cup",{[0]=g_utbackground,[1]=g_utbackground,[2]=g_utbackground})
			self.OnUpdate()	
			
			--on relance la liste d'objet s'il y en avait une, et si il n'y pas déjà actuellement
			RestartObjectList()
			
			--en config mini on vire les particules
			if ProfilConfig.Get("UseMinConfig") then
				for ind,ut in pairs(g_utforegroundtab) do
				ApplyToChildren(ut,DisablePart)
				end
			end
		
		end	
	end
	
end
function DisablePart(ut)
	if ut.ClassName == "Particle2DEmitter" then
		ut.Enabled = false
	end
end

function RestartObjectList()
	if not ObjectManager.SearchActivated() then
				
			if SampleLevel.IsRegistered(self.Name.."_search_6") and SampleLevel.IsEqual(self.Name.."_search_6","started") then
				ObjectManager.LaunchNewResearch(g_screenname.."_cup",6)
				return
			end
	end
end


-- function EnableInterfaceIG()
	-- -- if DebugOptions.interfaceVersion == 2 then
		-- LeftInterface.Enabled = false
	-- -- else
		-- SearchInterface.Enabled = false
	-- -- end
	-- --interfaceclsp.Enabled = true
-- end


function OnEnter_Gen()
	if g_closeuptype == "Search" then
		InventoryManager.OnEnterSearchSite()
	end
	if self.OnEnter ~= nil then
		self.OnEnter()
	end
end

function Itsawin() 
	PlaySoundEffect("int_closeupwin")
end

function OnUpdate(dt)
	if not IsEqualVariables("CurrentGamePhase","Closeup") and not IsEqualVariables("CurrentGamePhase","Tutorial")  then
		return
	end


	
	if self.UpdateUnit then
		self.UpdateUnit(dt)
	end
	
	if not g_closeuptype == "Search" then
		return
	end
	--on attend d'avoir la "main" avant de lancer ce texte 
	-- if IsEqualVariables("CurrentGamePhase","Closeup") and self.alllistdonetextplayed == false 
		-- and not ObjectManager.SearchActivated() 
		-- and SubtitlesBox.Flags_Visible == false and GetVariables("scrollingactive") 
		-- and self.CondSpecificToFinish()
		-- then --le scrolling active est pour les écrans sombres
		-- local res= false
		-- for u,ut in pairs(g_launchingcard) do
			-- res = res or ut.active
		-- end
		
		-- if not res then --aucune carte active
			-- local n = math.random(3)
			-- -- DisplaySimpleText("liste_complete0"..n)
			-- self.alllistdonetextplayed = true
		-- end
	-- end
	
	--tempo !!
	-- if obj_01_batte ~= nil then
		-- ConsoleText0.Text = ComputeObjVisibility(obj_01_batte)
	-- end
end


function CondSpecificToFinish()
	if self.assertpopupdone == nil then
		AssertPopup(false, " la fonction CondSpecificToFinish() n'est pas implémenté sur "..self.Name)
	end
	
	self.assertpopupdone = true
	return true
end

--callback à surcharger, appelé lorsqu'on quitte le closeup
function OnLeave()
end
--fonction générique à appeler lors de la résolution d'un closeup. elle met à jour le statut de l'area parente
--et retourne au site d'excavation précédent.
-- function Resolve()
	-- FlagsFunctions.AddFlag(AREA_RESOLVED,nil,self.ParentArea.Name)
	-- NavigationManager.RestorePreviousManager()
-- end
function CloseBlink(ut)
	if string.find(ut.Name,"blinkfor_") then
		OPUnitFactory.CloseUnit(ut)
	end
end

function CloseFx(ut)
	if string.find(ut.Name,"fxfor_") then
		OPUnitFactory.CloseUnit(ut)
	end
end


function OnDisable()
	OPLog.Log("on quitte le closeup " ..self.Name)
	
	-- Closeup_Mask.Enabled = false
	--à mettre ici en générique ?
	SubtitlesDisplay.HideSubtitles()
	
	-- OPUnitFactory.CloseUnit(g_skiptimer)
	
	ApplyToClass("SimpleSound",CloseLoopSound)
	close_up_reload.Enabled = true
	close_up_rules.Enabled = true
	skip_parent.Enabled = true
	interfaceclsp.Enabled = false
	Inventory_bg.Enabled = false
	-- Closeup_SkipButton_Indication.Enabled = false
	
	-- Closeup_ShowConsigne.Enabled = false
	
	--on clean les objets dynamiques
	-- -> important que le disable soit fait avant le enable suivant
	ApplyToClass("Object",OPUnitFactory.CloseUnit)

	--on vire la recherche en cours
	ObjectManager.CleanOldUnit()
	
	
	--on fait un clean des blinking
	-- ApplyToClass("Animation",CloseBlink)
	
	-- on fait un clean des particules de highlight qui remplacent les blinks
	ApplyToClass("ParticlesHighlightObjects",CloseFx)
	
	--sécurité on close les takeobjecteffect particules
	ApplyToClass("TakeObjectEffect",OPUnitFactory.CloseUnit)
	
	--on ferme par sécurité les menus
	LeftInventory.CloseInventory()
	
	if DebugOptions.interfaceVersion == 2 then
			LeftInterface.Enabled = false
	
	end
end

function CloseLoopSound(ut)
	if ut.Loop == true then
		OPUnitFactory.CloseUnit(ut)
	end
end




function OnPopupYNLeave(popupansw, message)
	if message == "msg_ig_skip" then
		if popupansw  then
			GetCurrentManager().Itsawin()
		end
	end
end	
