'use client';

import { useAuthStore, selectMembershipFor } from '@/stores/auth';
import { STORE_ROLE_RANK } from '@alqove/api-client';
import type { Membership, StoreCapability } from '@alqove/api-client';

export interface StoreCapabilities {
  membership: Membership | undefined;
  /** Rank of the caller's role at this store; 0 when not a member. */
  rank: number;
  can: (capability: StoreCapability) => boolean;
}

/**
 * The caller's resolved capabilities at a store, read from the auth store's
 * memberships (Port 00 §7). Renders fail-closed: no membership → nothing is
 * permitted. The server enforces independently; this only decides what to show.
 */
export function useStoreCapabilities(storeId: string | null | undefined): StoreCapabilities {
  const membership = useAuthStore(selectMembershipFor(storeId));
  const capabilities = new Set<StoreCapability>(membership?.capabilities ?? []);

  return {
    membership,
    rank: membership ? STORE_ROLE_RANK[membership.role] : 0,
    can: (capability) => capabilities.has(capability),
  };
}
