require "DAMN_Armor_Shared";

--***********************************************************
--**                   KI5 / bikinihorst                   **
--***********************************************************
--v2.0.0

GT500 = GT500 or {};

function GT500.activeArmor(player, vehicle)

    	--

			for partId, armorPartId in pairs({
				["Windshield"] = "GT500WindshieldArmor",
				["WindshieldRear"] = "GT500WindshieldRearArmor",
			}) do
				local part = vehicle:getPartById(partId);
				local protection = vehicle:getPartById(armorPartId);
				if protection and protection:getInventoryItem() and part and part:getModData()
				then
					local partCond = tonumber(part:getModData().saveCond);
					if protection:getCondition() > 0 and partCond and part:getCondition() < partCond
					then
						DAMN.Armor:setPartCondition(part, partCond);
						local cond = protection:getCondition() - ZombRand(4);
						DAMN.Armor:setPartCondition(protection, cond);
					end
				end
			end

		--

			local protection = vehicle:getPartById("GT500FrontBumper")
			local inventoryItem = protection:getInventoryItem();
			local part = vehicle:getPartById("EngineDoor")
				if part and protection and part:getInventoryItem() and inventoryItem and part:getModData()
				then 
					if inventoryItem:getFullType() ~= "Base.67gt500eFrontBumper0" and inventoryItem:getFullType() ~= "Base.67gt500FrontBumper0" then
						local partCond = tonumber(part:getModData().saveCond)
						if protection:getCondition() > 0 and partCond
						then
							if part:getCondition() < partCond
							then
								DAMN.Armor:setPartCondition(part, partCond);
								local cond = protection:getCondition() - (ZombRandBetween(0,100) <= 50 and ZombRandBetween(0,4) or 0);
								DAMN.Armor:setPartCondition(protection, cond);
							end
						end
					elseif inventoryItem:getFullType() == "Base.67gt500eFrontBumper0" or inventoryItem:getFullType() == "Base.67gt500FrontBumper0" then
						local partCond = tonumber(part:getModData().saveCond)
						if protection:getCondition() > 0 and partCond
						then
							if part:getCondition() < partCond
							then
								DAMN.Armor:setPartCondition(part, partCond);
								local cond = protection:getCondition() - ZombRandBetween(1,12);
								DAMN.Armor:setPartCondition(protection, cond);
							end
						end
					end
					else
						local protection = vehicle:getPartById("GT500FrontBumper")
						local inventoryItem = protection:getInventoryItem();
						local part = vehicle:getPartById("Engine")
							if protection and inventoryItem and part and part:getModData()
							then
								if inventoryItem:getFullType() ~= "Base.67gt500eFrontBumper0" and inventoryItem:getFullType() ~= "Base.67gt500FrontBumper0" then
									local partCond = tonumber(part:getModData().saveCond)
									if protection:getCondition() > 0 and partCond
									then
										if part:getCondition() < partCond
										then
											KI5:sendVehicleCommandWrapper(player, part, "setPartCondition", {
												condition = partCond
											})
											local cond = protection:getCondition() - ZombRandBetween(1,3);
											KI5:sendVehicleCommandWrapper(player, protection, "setPartCondition", {
												condition = cond
											})
										end
									end
								end
							end
				end

				--

			local protection = vehicle:getPartById("GT500RearBumper")
			local inventoryItem = protection:getInventoryItem();
			local part = vehicle:getPartById("TrunkDoor")
				if part and protection and part:getInventoryItem() and inventoryItem and part:getModData()
				then 
					if inventoryItem:getFullType() ~= "Base.67gt500RearBumper0" then
						local partCond = tonumber(part:getModData().saveCond)
						if protection:getCondition() > 0 and partCond
						then
							if part:getCondition() < partCond
							then
								DAMN.Armor:setPartCondition(part, partCond);
								local cond = protection:getCondition() - (ZombRandBetween(0,100) <= 65 and ZombRandBetween(0,3) or 0);
								DAMN.Armor:setPartCondition(protection, cond);
							end
						end
					end
				end

		--

			for partId, armorPartId in pairs({
				["WindowFrontLeft"] = "GT500WindowLeftArmor",
				["WindowFrontRight"] = "GT500WindowRightArmor",
			}) do
				local part = vehicle:getPartById(partId);
				local protection = vehicle:getPartById(armorPartId);
				if protection and protection:getInventoryItem() and part and part:getModData()
				then
					local partCond = tonumber(part:getModData().saveCond);
					if protection:getCondition() > 0 and partCond and part:getCondition() < partCond
					then
						DAMN.Armor:setPartCondition(part, partCond);
                        local cond = protection:getCondition() - ZombRandBetween(0,2);
						DAMN.Armor:setPartCondition(protection, cond);
					end
				end
			end

		--

			for partId, armorPartId in pairs({
				["HeadlightLeft"] = "GT500FrontBumper",
				["HeadlightRight"] = "GT500FrontBumper",
				["HeadlightRearLeft"] = "GT500RearBumper",
				["HeadlightRearRight"] = "GT500RearBumper",
			}) do
				local part = vehicle:getPartById(partId);
				local protection = vehicle:getPartById(armorPartId);
				if protection and protection:getInventoryItem() and part and part:getModData()
				then
					local partCond = tonumber(part:getModData().saveCond);
					if protection:getCondition() > 0 and partCond and part:getCondition() < partCond
					then
						DAMN.Armor:setPartCondition(part, partCond);
					end
				end
			end

		--

		for i, freezeState in ipairs ({"GT500SpareTire, GT500Roofrack"})
				do
					if vehicle:getPartById(freezeState) then
						local part = vehicle:getPartById(freezeState)
						local freezeCond = tonumber(part:getModData().saveCond)
					    	if freezeCond and part:getCondition() < freezeCond then
					    		DAMN.Armor:setPartCondition(part, freezeCond);
							end
					end
			end

		--

			for i, nodisplay in ipairs ({"TruckBed"})
				do
					if vehicle:getPartById(nodisplay) then
						local part = vehicle:getPartById(nodisplay)
						local nodisplay = 100;
					    	if part:getCondition() < nodisplay then
					    		DAMN.Armor:setPartCondition(part, nodisplay);
							end
					end
			end

		--
end

DAMN.Armor:add("Base.67gt500", GT500.activeArmor);
DAMN.Armor:add("Base.67gt500e", GT500.activeArmor);