// Partner admin's "acting as a customer admin" state. When a partner clicks
// into a customer org, the sidebar reshapes to that customer's admin nav and
// a persistent banner indicates the partner context.
//
// In real use, every action while in this mode is logged with the partner's
// identity (not the customer's) — the design spec is explicit about this for
// trust. We hold the active customer's tenant _id (the same key the customers
// page passes to enter()); consumers resolve it against the real tenant list.

const activeCustomerId = ref<string | null>(null)

export const usePartnerMode = () => {
  // Partner mode is only ever meaningful for partner staff. The active-customer
  // id lives in sessionStorage, which is shared across whoever signs in on this
  // device — so an admin or end-user could otherwise inherit a partner's leftover
  // state and see partner-view chrome. We gate every read on isPartnerStaff so
  // that can never happen, regardless of what's stored.
  const { isPartnerStaff } = useMe()

  function enter(customerId: string) {
    activeCustomerId.value = customerId
    if (import.meta.client) {
      sessionStorage.setItem('dezky-partner-active-customer', customerId)
    }
  }
  function exit() {
    activeCustomerId.value = null
    if (import.meta.client) {
      sessionStorage.removeItem('dezky-partner-active-customer')
    }
  }
  function hydrate() {
    if (!import.meta.client) return
    // Non-partner accounts must never be in partner mode. Purge any stale
    // entry left by a previous partner session on this same device.
    if (!isPartnerStaff.value) {
      sessionStorage.removeItem('dezky-partner-active-customer')
      activeCustomerId.value = null
      return
    }
    if (activeCustomerId.value) return
    const stored = sessionStorage.getItem('dezky-partner-active-customer')
    if (stored) activeCustomerId.value = stored
  }
  return {
    activeCustomerId,
    isActive: computed(
      () => isPartnerStaff.value && activeCustomerId.value !== null,
    ),
    enter,
    exit,
    hydrate,
  }
}
