// src/lib/tours/actions.ts
"use server";

// Une seule écriture publique. `markTourAction` NE PREND PAS d'identifiant
// d'utilisateur : chaque export d'un module "use server" est un endpoint POST
// atteignable par n'importe qui, et un `userId` en paramètre laisserait un
// appelant écrire la progression d'autrui. Il est dérivé de la session.
// La LECTURE reste hors de ce fichier (./progress.ts, appelé par les RSC).
//
// Le corps vit dans ./mark-tour.ts, qui reçoit ses dépendances en paramètres :
// ce fichier n'est qu'un câblage, et la garde d'usurpation y est asservie par
// un test qui observe l'absence d'écriture (mark-tour.test.ts).
import { getActiveUserId } from "@/lib/active-org";
import { isImpersonating } from "@/lib/auth/impersonation-guard";
import { markTour } from "./mark-tour";
import { setTourProgress, type TourStatus } from "./progress";

export async function markTourAction(
  tourId: string,
  status: TourStatus,
): Promise<void> {
  await markTour(
    {
      isImpersonating,
      getUserId: getActiveUserId,
      setProgress: setTourProgress,
    },
    tourId,
    status,
  );
}
