import type { Permission, Role } from "@familyalbum/shared";
import type { Tx } from "../db/client.js";
export interface FamilySummary {
    id: string;
    name: string;
    createdAt: string;
    role: Role;
    permission: Permission;
    reactionsEnabled: boolean;
    commentsEnabled: boolean;
    createdBy: string | null;
}
/**
 * Frontière cœur → module : le cœur (auth) ne connaît pas les tables d'un
 * module. L'implémentation est fournie par le module PrivateFamily lors de
 * l'assemblage (app.ts). Le cœur impose le contrat, le module l'exécute —
 * seule direction de dépendance autorisée (module → cœur).
 */
export interface FamilyProvider {
    /**
     * Crée la famille initiale du compte (module) dans la transaction du cœur.
     * Appelé depuis /auth/register : user + famille + appartenance admin
     * doivent être atomiques.
     */
    createInitialFamily(tx: Tx, userId: string, familyName: string): string;
    /** Familles de l'utilisateur (register/login/me). */
    listForUser(userId: string): FamilySummary[];
}
