Script wont behave even tho everything makes sense

local player = game.Players.LocalPlayer
local mouse = player:GetMouse()

local TweenService = game:GetService("TweenService")
local UIS = game:GetService("UserInputService")

local gui = script.Parent:WaitForChild("Gui")
local frame = gui.MainFrame

local infoFrame = frame:WaitForChild("InfoFrame")

local buildingFrame1 = frame:WaitForChild("BuildingsFrame1")
local cancelPlacementFrame = frame.CancelPlacement

local module = require(game.ReplicatedStorage.MainModule)
local eventsFolder = game.ReplicatedStorage:WaitForChild("Events")

local currentTab = 1

local function setUpText()
	local buildingData = (currentTab == 1) and module.barracks or module.uttility

	for i = 1, 4 do
		local button = buildingFrame1:FindFirstChild("Building" .. i)
		if button and button:IsA("ImageButton") then
			local buildingName = button:FindFirstChild("BuildingName")
			local building = buildingData["Building" .. i]

			if building then
				buildingName.Text = building.Name

				button.MouseEnter:Connect(function()
					buildingName.Text = "$" .. building.Price
				end)
				button.MouseLeave:Connect(function()
					buildingName.Text = building.Name
				end)
			else
				buildingName.Text = "No Building"
			end
		end
	end
end

local function switchTab(tabNumber)
	currentTab = tabNumber
	setUpText()
end

local function InFrame()
	buildingFrame1.Visible = true
	infoFrame.Visible = true
	local extendedPos = UDim2.new(0, 0, 0.874, 0)

	local tweenInfo = TweenInfo.new(0.7, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out)
	local tween = TweenService:Create(frame, tweenInfo, {Position = extendedPos})
	tween:Play()
end

local function OutFrame()
	buildingFrame1.Visible = false
	infoFrame.Visible = false
	local retractedPos = UDim2.new(0, 0, 0.956, 0)

	local tweenInfo = TweenInfo.new(0.7, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out)
	local tween = TweenService:Create(frame, tweenInfo, {Position = retractedPos})
	tween:Play()
end
OutFrame()

frame.MouseMoved:Connect(function()
	InFrame()
end)

frame.MouseLeave:Connect(function()
	wait(1)
	OutFrame()
end)

frame.Tab1Button.MouseButton1Click:Connect(function()
	switchTab(1)
	print(currentTab)
end)

frame.Tab2Button.MouseButton1Click:Connect(function()
	switchTab(2)
	print(currentTab)
end)

local hasChosen = false

local function placeBuilding(buildingData)
	hasChosen = true
	cancelPlacementFrame.Visible = true

	local buildingIndicatorModel = buildingData.model:Clone()

	local function cancelPlacement()
		hasChosen = false
		cancelPlacementFrame.Visible = false
		buildingIndicatorModel:Destroy()
	end

	local modelParts = buildingIndicatorModel:GetChildren()
	for i = 1, #modelParts do
		modelParts[i].Transparency = 0.5
		modelParts[i].CanCollide = false
		modelParts[i].CanQuery = false
		modelParts[i].Color = Color3.new(124, 124, 124)
	end

	buildingIndicatorModel.Parent = workspace

	UIS.InputBegan:Connect(function(input)
		if input.KeyCode == Enum.KeyCode.R then
			if hasChosen and buildingIndicatorModel and buildingIndicatorModel.PrimaryPart then
				local rotationAngle = math.rad(45)
				local currentPosition = buildingIndicatorModel.PrimaryPart.CFrame
				local rotation = CFrame.Angles(0, rotationAngle, 0)
				local newPosition = currentPosition * rotation
				buildingIndicatorModel:SetPrimaryPartCFrame(newPosition)
			end
		end
	end)

	mouse.Button1Down:Once(function()
		if hasChosen and buildingIndicatorModel then
			local getChosenPosition = buildingIndicatorModel:GetPrimaryPartCFrame()
			eventsFolder.PlaceEvent:FireServer(mouse.Hit.p, buildingData, getChosenPosition)
			cancelPlacement()
		else
			warn("Error when placing!")
		end
	end)

	while hasChosen do
		buildingIndicatorModel:MoveTo(mouse.Hit.p)
		task.wait()

		cancelPlacementFrame.MouseEnter:Connect(cancelPlacement)
	end
end

for i = 1, 4 do
	local button = buildingFrame1:FindFirstChild("Building" .. i)
	local buildingData = (currentTab == 1) and module.barracks["Building" .. i] or module.uttility["Building" .. i]

	button.MouseButton1Click:Connect(function()
		if not hasChosen then
			placeBuilding(buildingData)
		end
	end)
end

Sorry for long script, this is a building system (local), you can change between tabs 1/2. When you are in tab 1 you should be able to work whit the barracks, on tab 2 whit uttility, even tho I added this

local buildingData = (currentTab == 1) and module.barracks or module.uttility

To make sure it will do just that, when I change beetwen tabs it places just the barracks type and for the hovering over buttons it will always show the barrack name instead of the uttility.

Example

uttility = {
		["Building1"] = {
			Name = "Hospital",
			Price = 50,
			model = buildingsFolder.Uttility.Hospital
		};

when i am on tab 2 and i hover over a button it should use these untill you change tabs, but it only works once, meaning that if you hover to show the price, after stopping to hover, it will show barrack name.

Also it wont place the good model, meaning always barrack model.

Tell me if you need clarifications