import { hasRole } from '@/utils/permission';
import { useUserStore } from '@/store/modules/user';

function isSuperAdmin(): boolean {
  try {
    return hasRole('superAdmin');
  } catch {
    return false;
  }
}

function getCurrentUserId(): number | undefined {
  try {
    const store = useUserStore();
    const id = store?.info?.userId;
    if (typeof id === 'number' && Number.isFinite(id) && id > 0) {
      return id;
    }
  } catch {
    // Pinia may not be active in some early-init code paths.
  }
  const raw = localStorage.getItem('UserId');
  if (!raw) {
    return undefined;
  }
  const n = Number(raw);
  return Number.isFinite(n) && n > 0 ? n : undefined;
}

/**
 * Credit module data scope:
 * - superAdmin: see all data
 * - others: only see data published by themselves (userId)
 */
export function withCreditUserScope<T extends Record<string, any> | undefined>(
  params: T
): T {
  if (isSuperAdmin()) {
    return params;
  }
  const userId = getCurrentUserId();
  if (!userId) {
    return params;
  }
  if (!params) {
    return { userId } as T;
  }
  return { ...(params as any), userId } as T;
}
