import { cache } from 'react';
import { headers } from 'next/headers';
import { auth } from './auth';
import type { Permission } from './source';

/**
 * La session est lue plusieurs fois par requête : le layout des docs, la page,
 * et `getPermission()` la demandent chacun. `cache()` déduplique à l'échelle de
 * la requête : sans lui, une seule navigation déclencherait trois lectures de
 * session pour un résultat identique.
 *
 * La déduplication ne franchit pas les requêtes : chaque nouvelle requête relit
 * la session, ce qui est exactement le comportement voulu pour une révocation.
 */
export const getCurrentSession = cache(async () => {
  return auth.api.getSession({ headers: await headers() });
});

export async function getPermission(): Promise<Permission> {
  return (await getCurrentSession()) ? 'member' : 'anonymous';
}
