Files
2026-08-19 20:11:36 +02:00

76 lines
2.6 KiB
Lua

Bridge.Housing = {
ClientProviders = {},
}
function Bridge.Housing.RegisterClientProvider(name, provider)
assert(type(name) == "string" and name ~= "", "Housing provider name must be a non-empty string")
assert(type(provider) == "table" and type(provider.execute) == "function", "Housing client provider must implement execute")
assert(
provider.enrich_overview == nil or type(provider.enrich_overview) == "function",
"Housing client provider enrich_overview must be a function"
)
assert(not Bridge.Housing.ClientProviders[name], ("Housing client provider '%s' is already registered"):format(name))
Bridge.Housing.ClientProviders[name] = provider
end
function Bridge.Housing.EnrichOverview(provider_name, properties)
if type(properties) ~= "table" then
return nil, "invalid_overview"
end
local provider = Bridge.Housing.ClientProviders[provider_name]
if not provider or type(provider.enrich_overview) ~= "function" then
return properties
end
local success, enriched, error_code = pcall(provider.enrich_overview, properties)
if not success then
Bridge.Debug(
"error",
"[sky_phone] Housing provider '%s' overview enrichment failed: %s",
tostring(provider_name),
tostring(enriched)
)
return properties
end
if type(enriched) ~= "table" then
Bridge.Debug(
"error",
"[sky_phone] Housing provider '%s' returned invalid overview enrichment: %s",
tostring(provider_name),
tostring(error_code or enriched)
)
return properties
end
local entrances = {}
for _, property in ipairs(enriched) do
if type(property) == "table" and property.id ~= nil and entrances[property.id] == nil then
entrances[property.id] = Bridge.Normalize.Coordinates(property.entrance)
end
end
local result = {}
for _, property in ipairs(properties) do
local entrance = type(property) == "table" and entrances[property.id] or nil
if entrance then
local normalized = {}
for key, value in pairs(property) do
normalized[key] = value
end
normalized.entrance = entrance
result[#result + 1] = normalized
else
result[#result + 1] = property
end
end
return result
end
function Bridge.Housing.Execute(provider_name, action, data)
local provider = Bridge.Housing.ClientProviders[provider_name]
if not provider then
return false, "provider_unavailable"
end
return provider.execute(action, data)
end