import { _ as __nuxt_component_0 } from './nuxt-link-Ci8vU-Yt.mjs'; import { defineComponent, ref, computed, withCtx, createTextVNode, toDisplayString, useSSRContext } from 'vue'; import { ssrRenderAttrs, ssrInterpolate, ssrRenderClass, ssrRenderList, ssrRenderComponent, ssrRenderAttr, ssrIncludeBooleanAttr, ssrLooseContain, ssrLooseEqual } from 'vue/server-renderer'; import { useRoute, useRouter } from 'vue-router'; import { c as useAuthStore } from './server.mjs'; import '../nitro/nitro.mjs'; import 'node:http'; import 'node:https'; import 'node:events'; import 'node:buffer'; import 'node:fs'; import 'node:path'; import 'node:crypto'; import 'node:url'; import 'pinia'; import '../routes/renderer.mjs'; import 'vue-bundle-renderer/runtime'; import 'unhead/server'; import 'devalue'; import 'unhead/utils'; import 'unhead/plugins'; const _sfc_main = /* @__PURE__ */ defineComponent({ __name: "index", __ssrInlineRender: true, setup(__props) { const route = useRoute(); useRouter(); const auth = useAuthStore(); route.params.id; const loading = ref(true); const error = ref(null); const user = ref(null); const memberships = ref([]); const membershipsLoading = ref(false); const activeTab = ref("profile"); const showEditModal = ref(false); const saving = ref(false); const editForm = ref({ email: "", preferred_language: "", region_code: "", preferred_currency: "", subscription_plan: "", subscription_expires_at: "", scope_level: "", scope_id: "", is_active: true, is_vip: false, person_last_name: "", person_first_name: "", person_phone: "", person_mothers_last_name: "", person_mothers_first_name: "", person_birth_place: "", person_birth_date: "" }); const notification = ref({ show: false, type: "success", message: "" }); const tabs = [ { key: "profile", label: "users.details.profile_tab" }, { key: "memberships", label: "users.details.memberships_tab" } ]; const userDisplayName = computed(() => { if (!user.value) return ""; const p = user.value.person; if ((p == null ? void 0 : p.last_name) || (p == null ? void 0 : p.first_name)) { return [p.last_name, p.first_name].filter(Boolean).join(" "); } return user.value.email || "User #" + user.value.id; }); const statusLabel = computed(() => { var _a; if (!user.value) return ""; const map = { active: "Active", inactive: "Inactive", deleted: "Deleted", banned: "Banned" }; return map[(_a = user.value.status) == null ? void 0 : _a.toLowerCase()] || user.value.status || "Active"; }); const statusBadgeClass = computed(() => { var _a; if (!user.value) return ""; const map = { active: "bg-emerald-500/10 text-emerald-400", inactive: "bg-slate-500/10 text-slate-400", deleted: "bg-red-500/10 text-red-400", banned: "bg-red-500/10 text-red-400" }; return map[(_a = user.value.status) == null ? void 0 : _a.toLowerCase()] || "bg-emerald-500/10 text-emerald-400"; }); const statusDotClass = computed(() => { var _a; if (!user.value) return ""; const map = { active: "bg-emerald-400", inactive: "bg-slate-400", deleted: "bg-red-400", banned: "bg-red-400" }; return map[(_a = user.value.status) == null ? void 0 : _a.toLowerCase()] || "bg-emerald-400"; }); const hasEditPermission = computed(() => { var _a, _b; if (auth.isAdmin) return true; return !!((_b = (_a = auth.user) == null ? void 0 : _a.system_capabilities) == null ? void 0 : _b["users:edit"]); }); function getInitials(name) { if (!name) return "?"; return name.split(" ").map((w) => w[0]).join("").toUpperCase().slice(0, 2); } function getInitialsColor(name) { const colors = [ "bg-red-500", "bg-yellow-500", "bg-green-500", "bg-blue-500", "bg-indigo-500", "bg-purple-500", "bg-pink-500", "bg-teal-500" ]; let hash = 0; for (let i = 0; i < (name || "").length; i++) { hash = name.charCodeAt(i) + ((hash << 5) - hash); } return colors[Math.abs(hash) % colors.length]; } function formatDate(date) { if (!date) return ""; try { return new Date(date).toLocaleDateString("en-GB", { year: "numeric", month: "short", day: "numeric" }); } catch { return String(date); } } function roleLabel(role) { const map = { admin: "Admin", user: "User", staff: "Staff", superadmin: "Superadmin" }; return map[role == null ? void 0 : role.toLowerCase()] || role || "User"; } function roleBadgeClass(role) { const map = { admin: "bg-purple-500/10 text-purple-400", user: "bg-blue-500/10 text-blue-400", staff: "bg-cyan-500/10 text-cyan-400", superadmin: "bg-amber-500/10 text-amber-400" }; return map[role == null ? void 0 : role.toLowerCase()] || "bg-slate-500/10 text-slate-400"; } function planBadgeClass(plan) { const map = { FREE: "bg-slate-500/10 text-slate-400", PREMIUM: "bg-emerald-500/10 text-emerald-400", ENTERPRISE: "bg-amber-500/10 text-amber-400" }; return map[plan == null ? void 0 : plan.toUpperCase()] || "bg-slate-500/10 text-slate-400"; } function orgRoleLabel(role) { const map = { admin: "Admin", manager: "Manager", member: "Member", owner: "Owner" }; return map[role == null ? void 0 : role.toLowerCase()] || role || "Member"; } function memberStatusLabel(status) { const map = { active: "Active", invited: "Invited", suspended: "Suspended", inactive: "Inactive" }; return map[status == null ? void 0 : status.toLowerCase()] || status || "Unknown"; } function memberStatusBadgeClass(status) { const map = { active: "bg-emerald-500/10 text-emerald-400", invited: "bg-blue-500/10 text-blue-400", suspended: "bg-red-500/10 text-red-400", inactive: "bg-slate-500/10 text-slate-400" }; return map[status == null ? void 0 : status.toLowerCase()] || "bg-slate-500/10 text-slate-400"; } function memberStatusDotClass(status) { const map = { active: "bg-emerald-400", invited: "bg-blue-400", suspended: "bg-red-400", inactive: "bg-slate-400" }; return map[status == null ? void 0 : status.toLowerCase()] || "bg-slate-400"; } return (_ctx, _push, _parent, _attrs) => { var _a; const _component_NuxtLink = __nuxt_component_0; _push(``); if (loading.value) { _push(`

${ssrInterpolate(_ctx.$t("users.details.loading"))}

`); } else if (error.value) { _push(`

${ssrInterpolate(error.value)}

`); } else if (user.value) { _push(`
${ssrInterpolate(getInitials(userDisplayName.value))}

${ssrInterpolate(userDisplayName.value)}

${ssrInterpolate(statusLabel.value)}`); if (user.value.is_vip) { _push(` VIP `); } else { _push(``); } _push(`

${ssrInterpolate(user.value.email)} `); if ((_a = user.value.person) == null ? void 0 : _a.phone) { _push(`\xB7 ${ssrInterpolate(user.value.person.phone)}`); } else { _push(``); } _push(`

`); if (hasEditPermission.value) { _push(``); } else { _push(``); } _push(`
`); if (activeTab.value === "profile") { _push(`

${ssrInterpolate(_ctx.$t("users.details.account_info"))}

${ssrInterpolate(user.value.id)}

${ssrInterpolate(user.value.email)}

${ssrInterpolate(roleLabel(user.value.role))}

${ssrInterpolate(formatDate(user.value.created_at))}

${ssrInterpolate(formatDate(user.value.last_login_at) || "\u2014")}

${ssrInterpolate(user.value.ui_mode || "personal")}

${ssrInterpolate(user.value.preferred_language || "\u2014")}

${ssrInterpolate(user.value.region_code || "\u2014")}

${ssrInterpolate(user.value.preferred_currency || "\u2014")}

${ssrInterpolate(_ctx.$t("users.details.subscription_info"))}

${ssrInterpolate(user.value.subscription_plan || "\u2014")}

${ssrInterpolate(formatDate(user.value.subscription_expires_at) || "\u2014")}

${ssrInterpolate(user.value.scope_level || "individual")}

${ssrInterpolate(user.value.max_vehicles)}

${ssrInterpolate(user.value.max_garages)}

`); if (user.value.person) { _push(`

${ssrInterpolate(_ctx.$t("users.details.personal_info"))}

${ssrInterpolate(user.value.person.last_name || "\u2014")}

${ssrInterpolate(user.value.person.first_name || "\u2014")}

${ssrInterpolate(user.value.person.phone || "\u2014")}

${ssrInterpolate(user.value.person.birth_place || "\u2014")}

${ssrInterpolate(formatDate(user.value.person.birth_date) || "\u2014")}

${ssrInterpolate([user.value.person.mothers_last_name, user.value.person.mothers_first_name].filter(Boolean).join(" ") || "\u2014")}

`); if (user.value.person.address) { _push(`

${ssrInterpolate(_ctx.$t("users.details.address"))}

${ssrInterpolate(user.value.person.address.address_zip || "\u2014")}

${ssrInterpolate(user.value.person.address.address_city || "\u2014")}

${ssrInterpolate([user.value.person.address.address_street_type, user.value.person.address.address_street_name].filter(Boolean).join(" ") || "\u2014")}

${ssrInterpolate(user.value.person.address.address_house_number || "\u2014")}

`); } else { _push(``); } _push(`
`); } else { _push(`

${ssrInterpolate(_ctx.$t("users.details.no_person_record"))}

`); } _push(`
`); } else { _push(``); } if (activeTab.value === "memberships") { _push(`

${ssrInterpolate(_ctx.$t("users.details.memberships"))}

${ssrInterpolate(_ctx.$t("users.details.memberships_count", { count: memberships.value.length }))}

`); if (membershipsLoading.value) { _push(`
`); } else if (memberships.value.length === 0) { _push(`

${ssrInterpolate(_ctx.$t("users.details.no_memberships"))}

`); } else { _push(`
`); ssrRenderList(memberships.value, (m) => { _push(``); }); _push(`
${ssrInterpolate(_ctx.$t("users.details.org_name"))}${ssrInterpolate(_ctx.$t("users.details.org_role"))}${ssrInterpolate(_ctx.$t("users.details.member_status"))}${ssrInterpolate(_ctx.$t("users.details.joined_at"))}${ssrInterpolate(_ctx.$t("users.details.verified"))}
`); _push(ssrRenderComponent(_component_NuxtLink, { to: "/garages/" + m.organization_id, class: "text-sm font-medium text-white hover:text-indigo-400 hover:underline transition-colors" }, { default: withCtx((_, _push2, _parent2, _scopeId) => { if (_push2) { _push2(`${ssrInterpolate(m.organization_display_name || m.organization_name)}`); } else { return [ createTextVNode(toDisplayString(m.organization_display_name || m.organization_name), 1) ]; } }), _: 2 }, _parent)); _push(`${ssrInterpolate(orgRoleLabel(m.role))} ${ssrInterpolate(memberStatusLabel(m.status))}${ssrInterpolate(formatDate(m.joined_at) || "\u2014")}`); if (m.is_verified) { _push(` ${ssrInterpolate(_ctx.$t("users.details.verified_yes"))}`); } else { _push(`${ssrInterpolate(_ctx.$t("users.details.verified_no"))}`); } _push(`
`); } _push(`
`); } else { _push(``); } if (showEditModal.value) { _push(`

${ssrInterpolate(_ctx.$t("users.details.edit_user"))}

${ssrInterpolate(_ctx.$t("users.details.personal_info"))}

`); if (saving.value) { _push(``); } else { _push(``); } _push(` ${ssrInterpolate(saving.value ? _ctx.$t("users.details.saving") : _ctx.$t("users.details.save"))}
`); } else { _push(``); } if (notification.value.show) { _push(`
`); if (notification.value.type === "success") { _push(``); } else { _push(``); } _push(` ${ssrInterpolate(notification.value.message)}
`); } else { _push(``); } _push(``); } else { _push(``); } _push(``); }; } }); const _sfc_setup = _sfc_main.setup; _sfc_main.setup = (props, ctx) => { const ssrContext = useSSRContext(); (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/users/[id]/index.vue"); return _sfc_setup ? _sfc_setup(props, ctx) : void 0; }; export { _sfc_main as default }; //# sourceMappingURL=index-Bd_e7zBi.mjs.map