// src/lib/org/default-org.ts — règle unique de choix d'org par défaut.
// Utilisée par le hook session.create (auth.ts) ET par le self-heal de
// getActiveOrgId : le dernier choix persisté (user.lastActiveOrgId) s'il est
// encore membre, sinon la plus ancienne membership (déterministe), sinon
// undefined (utilisateur sans org — jamais de throw ici).
import "server-only";

import { asc, eq } from "drizzle-orm";
import { member, user } from "@/lib/db/auth-schema";
import { db } from "@/lib/db/client";

export async function resolveDefaultOrgId(
  userId: string,
): Promise<string | undefined> {
  const [u] = await db
    .select({ last: user.lastActiveOrgId })
    .from(user)
    .where(eq(user.id, userId))
    .limit(1);
  const memberships = await db
    .select({ orgId: member.organizationId })
    .from(member)
    .where(eq(member.userId, userId))
    .orderBy(asc(member.createdAt), asc(member.id));
  const preferred =
    u?.last && memberships.some((m) => m.orgId === u.last) ? u.last : undefined;
  return preferred ?? memberships[0]?.orgId;
}
