import { api } from "./api.js";
import { whoami } from "./access.js";
const KEY = "faucet.tenant";
let tenants = null;
export const tenantList = () => tenants;
export function currentTenant() {
const me = whoami();
if (me && me.tenant) return me.tenant;
try {
return localStorage.getItem(KEY) || "";
} catch {
return "";
}
}
export function setTenant(id) {
try {
if (id) localStorage.setItem(KEY, id);
else localStorage.removeItem(KEY);
} catch {
}
}
export function withTenant(params) {
const t = currentTenant();
if (t) params.set("tenant", t);
return params;
}
export async function loadTenants(onChange) {
try {
tenants = await api("/v1/tenants");
} catch {
tenants = null;
}
const sel = document.getElementById("tenant-select");
const nav = document.getElementById("nav-tenants");
if (nav) nav.hidden = tenants === null;
if (!sel) return;
if (tenants === null || (!tenants.length && !currentTenant())) {
sel.hidden = true;
return;
}
const me = whoami();
const pinned = !!(me && me.tenant);
const cur = currentTenant();
if (cur && !tenants.some((t) => t.id === cur) && !pinned) setTenant("");
sel.innerHTML =
(pinned ? "" : `<option value="">All tenants</option>`) +
tenants
.map((t) => `<option value="${escapeAttr(t.id)}">${escapeAttr(t.name || t.id)}</option>`)
.join("");
sel.value = currentTenant();
sel.disabled = pinned;
sel.hidden = false;
sel.onchange = () => {
setTenant(sel.value);
onChange();
};
}
function escapeAttr(s) {
return String(s).replace(/[&<>"']/g, (c) => ({ "&": "&", "<": "<", ">": ">", '"': """, "'": "'" })[c]);
}