---@meta

--- C_Garrison is a namespace for functions related to the garrison system.
---
--- @class C_Garrison
C_Garrison = {
	--- @param plotInstanceID number
	--- @return boolean
	--- Cancels the construction of a building.
	CancelConstruction = function(plotInstanceID) end,

	--- @return boolean
	--- Checks if the garrison can be upgraded.
	CanUpgradeGarrison = function() end,

	--- @param garrisonType number
	--- @return boolean
	--- Clears the complete talent for the specified garrison type.
	ClearCompleteTalent = function(garrisonType) end,

	--- @return boolean
	--- Closes the architect UI.
	CloseArchitect = function() end,

	--- @return boolean
	--- Closes the garrison tradeskill NPC UI.
	CloseGarrisonTradeskillNPC = function() end,

	--- @return boolean
	--- Closes the talent NPC UI.
	CloseTalentNPC = function() end,

	--- @return boolean
	--- Closes the tradeskill crafter UI.
	CloseTradeskillCrafter = function() end,

	--- @return table
	--- Returns all bonus ability effects.
	GetAllBonusAbilityEffects = function() end,

	--- @param buildingID number
	--- @return number id
	--- @return string name
	--- @return string textureKit
	--- @return string icon
	--- @return string description
	--- @return number rank
	--- @return number currencyID
	--- @return number currencyQty
	--- @return number goldQty
	--- @return number buildTime
	--- @return boolean needsPlan
	--- @return boolean isPrebuilt
	--- @return table possSpecs
	--- @return number[] upgrades
	--- @return boolean canUpgrade
	--- @return boolean isMaxLevel
	--- @return boolean hasFollowerSlot
	--- Returns information about a building.
	GetBuildingInfo = function(buildingID) end,

	--- @return table
	--- Returns the building lock information.
	GetBuildingLockInfo = function() end,

	--- @param garrisonType number
	--- @return table
	--- Returns a list of buildings for the specified garrison type.
	GetBuildings = function(garrisonType) end,

	--- @param plotInstanceID number
	--- @return table
	--- Returns buildings for a specific plot instance.
	GetBuildingsForPlot = function(plotInstanceID) end,

	--- @param garrisonType number
	--- @param uiCategoryID number
	--- @return table
	--- Returns buildings for a specific size and garrison type.
	GetBuildingsForSize = function(garrisonType, uiCategoryID) end,

	--- @return table
	--- Returns the sizes of buildings.
	GetBuildingSizes = function() end,

	--- @return table
	--- Returns information about building specifications.
	GetBuildingSpecInfo = function() end,

	--- @param plotInstanceID number
	--- @return number
	--- Returns the time remaining for a building.
	GetBuildingTimeRemaining = function(plotInstanceID) end,

	--- @param buildingID number
	--- @return string
	--- Returns the tooltip for a building.
	GetBuildingTooltip = function(buildingID) end,

	--- @param buildingID number
	--- @return table
	--- Returns upgrade information for a building.
	GetBuildingUpgradeInfo = function(buildingID) end,

	--- @param garrisonType number
	--- @return table
	--- Returns the complete talent for the specified garrison type.
	GetCompleteTalent = function(garrisonType) end,

	--- @param garrType number
	--- @return table
	--- Returns the currency types for the specified garrison type.
	GetCurrencyTypes = function(garrType) end,

	--- @return number
	--- Returns the current cypher equipment level.
	GetCurrentCypherEquipmentLevel = function() end,

	--- @return number
	--- Returns the current garrison talent tree friendship faction ID.
	GetCurrentGarrTalentTreeFriendshipFactionID = function() end,

	--- @return number
	--- Returns the current garrison talent tree ID.
	GetCurrentGarrTalentTreeID = function() end,

	--- @return number
	--- Returns the cyphers needed to reach the next equipment level.
	GetCyphersToNextEquipmentLevel = function() end,

	--- @param garrisonType number
	--- @return table
	--- Returns information about the garrison.
	GetGarrisonInfo = function(garrisonType) end,

	--- @param uiMapID number
	--- @return table
	--- Returns garrison plot instances for the specified map.
	GetGarrisonPlotsInstancesForMap = function(uiMapID) end,

	--- @param garrTalentTreeID number
	--- @return table
	--- Returns the currency types for the specified garrison talent tree.
	GetGarrisonTalentTreeCurrencyTypes = function(garrTalentTreeID) end,

	--- @param garrTalentTreeID number
	--- @return string
	--- Returns the type of the specified garrison talent tree.
	GetGarrisonTalentTreeType = function(garrTalentTreeID) end,

	--- @param followerType number
	--- @return number
	--- Returns the cost to upgrade the garrison.
	GetGarrisonUpgradeCost = function(followerType) end,

	--- @return number
	--- Returns the landing page garrison type.
	GetLandingPageGarrisonType = function() end,

	--- @param garrTypeID number
	--- @param noSort boolean
	--- @return table
	--- Returns items for the landing page.
	GetLandingPageItems = function(garrTypeID, noSort) end,

	--- @return number
	--- Returns the count of shipments on the landing page.
	GetLandingPageShipmentCount = function() end,

	--- @param buildingID number
	--- @return table
	--- Returns shipment information for a building on the landing page.
	GetLandingPageShipmentInfo = function(buildingID) end,

	--- @param containerID number
	--- @return table
	--- Returns shipment information by container ID.
	GetLandingPageShipmentInfoByContainerID = function(containerID) end,

	--- @param garrisonType number
	--- @return table
	--- Returns loose shipments for the specified garrison type.
	GetLooseShipments = function(garrisonType) end,

	--- @return number
	--- Returns the maximum cypher equipment level.
	GetMaxCypherEquipmentLevel = function() end,

	--- @return number
	--- Returns the number of pending shipments.
	GetNumPendingShipments = function() end,

	--- @return number
	--- Returns the number of shipment currencies.
	GetNumShipmentCurrencies = function() end,

	--- @return number
	--- Returns the number of shipment reagents.
	GetNumShipmentReagents = function() end,

	--- @param plotInstanceID number
	--- @return table
	--- Returns information about owned buildings.
	GetOwnedBuildingInfo = function(plotInstanceID) end,

	--- @param plotID number
	--- @return number, string, string, string, number, boolean, number, number, boolean, boolean
	--- Returns abbreviated information about owned buildings.
	GetOwnedBuildingInfoAbbrev = function(plotID) end,

	--- @param index number
	--- @return table
	--- Returns pending shipment information.
	GetPendingShipmentInfo = function(index) end,

	--- @param followerType number
	--- @return table
	--- Returns plots for the specified follower type.
	GetPlots = function(followerType) end,

	--- @param buildingID number
	--- @return table
	--- Returns plots for a specific building.
	GetPlotsForBuilding = function(buildingID) end,

	--- @return table
	--- Returns information about ship death animations.
	GetShipDeathAnimInfo = function() end,

	--- @return table
	--- Returns information about shipment containers.
	GetShipmentContainerInfo = function() end,

	--- @return table
	--- Returns information about shipment items.
	GetShipmentItemInfo = function() end,

	--- @param currencyIndex number
	--- @return table
	--- Returns information about shipment reagent currency.
	GetShipmentReagentCurrencyInfo = function(currencyIndex) end,

	--- @param reagentIndex number
	--- @return table
	--- Returns information about shipment reagents.
	GetShipmentReagentInfo = function(reagentIndex) end,

	--- @param reagentIndex number
	--- @return string
	--- Returns the item link for a shipment reagent.
	GetShipmentReagentItemLink = function(reagentIndex) end,

	--- @return number
	--- Returns the cost to change specifications.
	GetSpecChangeCost = function() end,

	--- @param plotInstanceID number
	--- @return number
	--- Returns the tab for a specific plot.
	GetTabForPlot = function(plotInstanceID) end,

	--- @param talentID number
	--- @return table
	--- Returns information about a specific talent.
	GetTalentInfo = function(talentID) end,

	--- @param garrTalentTreeID number
	--- @return number
	--- Returns the number of talent points spent in a talent tree.
	GetTalentPointsSpentInTalentTree = function(garrTalentTreeID) end,

	--- @param garrType number
	--- @param classID number
	--- @return table
	--- Returns talent tree IDs by class ID.
	GetTalentTreeIDsByClassID = function(garrType, classID) end,

	--- @param treeID number
	--- @return table
	--- Returns information about a specific talent tree.
	GetTalentTreeInfo = function(treeID) end,

	--- @param garrTalentTreeID number
	--- @return number, table
	--- Returns reset information for a talent tree.
	GetTalentTreeResetInfo = function(garrTalentTreeID) end,

	--- @param garrTalentID number
	--- @param researchRank number
	--- @param garrTalentTreeID number
	--- @param talentPointIndex number
	--- @param isRespec boolean
	--- @return number, table
	--- Returns research information for a talent tree talent.
	GetTalentTreeTalentPointResearchInfo = function(
		garrTalentID,
		researchRank,
		garrTalentTreeID,
		talentPointIndex,
		isRespec
	)
		return 0, {}
	end,

	--- @param talentID number
	--- @return number
	--- Returns the world quest ID for a talent unlock.
	GetTalentUnlockWorldQuest = function(talentID) end,

	--- @return boolean
	--- Checks if there are adventures available.
	HasAdventures = function() end,

	--- @param garrisonType number
	--- @return boolean
	--- Checks if the player has a garrison of the specified type.
	HasGarrison = function(garrisonType) end,

	--- @return boolean
	--- Checks if the player has a shipyard.
	HasShipyard = function() end,

	--- @param followerID number
	--- @return boolean
	--- Checks if a follower is on a completed mission.
	IsFollowerOnCompletedMission = function(followerID) end,

	--- @return boolean
	--- Checks if an invasion is available.
	IsInvasionAvailable = function() end,

	--- @return boolean
	--- Checks if the landing page minimap button is visible.
	IsLandingPageMinimapButtonVisible = function(garrType) end,

	--- @return boolean
	--- Checks if the player is on the garrison map.
	IsOnGarrisonMap = function() end,

	--- @return boolean
	--- Checks if the player is on a shipment quest for an NPC.
	IsOnShipmentQuestForNPC = function() end,

	--- @return boolean
	--- Checks if the player is on the shipyard map.
	IsOnShipyardMap = function() end,

	--- @param garrType number
	--- @return boolean
	--- Checks if the player is in a garrison of the specified type.
	IsPlayerInGarrison = function(garrType) end,

	--- @param talentID number
	--- @return boolean, string
	--- Checks if a talent condition is met.
	IsTalentConditionMet = function(talentID) end,

	--- @return boolean
	--- Checks if the player is using a party garrison.
	IsUsingPartyGarrison = function() end,

	--- @return boolean
	--- Checks if visiting the garrison is available.
	IsVisitGarrisonAvailable = function() end,

	--- @param plotInstanceID number
	--- @param buildingID number
	--- @return boolean
	--- Places a building at the specified plot instance.
	PlaceBuilding = function(plotInstanceID, buildingID) end,

	--- @param followerType number
	--- @return boolean
	--- Requests to upgrade the garrison.
	RequestGarrisonUpgradeable = function(followerType) end,

	--- @return boolean
	--- Requests information for the landing page shipment.
	RequestLandingPageShipmentInfo = function() end,

	--- @return boolean
	--- Requests the creation of a shipment.
	RequestShipmentCreation = function() end,

	--- @return boolean
	--- Requests information about shipments.
	RequestShipmentInfo = function() end,

	--- @param garrTalentID number
	--- @return boolean
	--- Researches a talent.
	ResearchTalent = function(garrTalentID) end,

	--- @param plotInstanceID number
	--- @return boolean
	--- Sets a building as active.
	SetBuildingActive = function(plotInstanceID) end,

	--- @return boolean
	--- Sets the building specialization.
	SetBuildingSpecialization = function() end,

	--- @param enabled boolean
	--- @return boolean
	--- Sets whether to use a party garrison.
	SetUsingPartyGarrison = function(enabled) end,

	--- @param garrType number
	--- @return boolean
	--- Checks if the map tab should be shown for the specified garrison type.
	ShouldShowMapTab = function(garrType) end,

	--- @param plotInstanceID1 number
	--- @param plotInstanceID2 number
	--- @return boolean
	--- Swaps two buildings.
	SwapBuildings = function(plotInstanceID1, plotInstanceID2) end,

	--- @param plotInstanceID number
	--- @return boolean
	--- Upgrades a building at the specified plot instance.
	UpgradeBuilding = function(plotInstanceID) end,

	--- @param followerType number
	--- @return boolean
	--- Upgrades the garrison for the specified follower type.
	UpgradeGarrison = function(followerType) end,
}
