"use client" import type { MigrationProject } from "@/lib/api/hooks/use-hosted-mail" export type MigrationOnboardingHints = { needs_user_oauth: boolean oauth_provider?: string waiting_for_admin: boolean waiting_reason?: string has_migration_credentials?: boolean needs_microsoft_admin_consent?: boolean } const WAITING_MESSAGES: Record = { project_not_activated: "Votre administrateur doit activer le projet de migration avant que l'import ne démarre. Vos jobs resteront en attente jusqu'à cette activation.", } export function usesAppOnlyAuth(project?: Pick): boolean { return project?.auth_mode === "google_dwd" || project?.auth_mode === "microsoft_app" } export function appOnlyAuthStepLabel(project?: MigrationProject): string { if (project?.auth_mode === "microsoft_app") { return "Import automatique (app Microsoft)" } if (project?.auth_mode === "google_dwd") { return "Import automatique (compte de service)" } return "Autoriser l'import Google / Microsoft" } export function waitingForAdminMessage(reason?: string): string { if (!reason) { return "En attente d'une action administrateur avant le démarrage de l'import." } return WAITING_MESSAGES[reason] ?? "En attente d'une action administrateur." } export function MigrationStepList({ steps, }: { steps: { label: string; done: boolean; current: boolean }[] }) { return (
    {steps.map((step) => (
  1. {step.done ? "✓" : "·"} {step.label}
  2. ))}
) } export function MigrationOnboardingAlerts({ project, onboarding, }: { project?: MigrationProject onboarding?: MigrationOnboardingHints }) { if (!onboarding) return null return (
{onboarding.waiting_for_admin && (

{waitingForAdminMessage(onboarding.waiting_reason)}

)} {usesAppOnlyAuth(project) && !onboarding.waiting_for_admin && (

{project?.auth_mode === "microsoft_app" ? ( <> Import Microsoft 365 configuré par votre administrateur (authentification app-only). Aucune autorisation OAuth personnelle requise — l'import démarre automatiquement une fois le projet actif et le consentement admin accordé. ) : ( <> Import Google configuré par votre administrateur (compte de service). Aucune autorisation OAuth personnelle requise — l'import démarre automatiquement une fois le projet actif. )}

)} {onboarding.needs_microsoft_admin_consent && project?.source_provider === "microsoft" && (

L'administrateur de votre organisation Microsoft 365 doit accorder le consentement admin à l'application Ultimail {project?.auth_mode === "microsoft_app" ? " (permissions application : Mail, Calendrier, Contacts, OneDrive)." : "."}{" "} {project?.auth_mode !== "microsoft_app" && "Vous pouvez autoriser votre compte personnel ci-dessous, mais l'import organisationnel peut échouer tant que ce consentement n'est pas fait."}

)} {onboarding.needs_user_oauth && !onboarding.has_migration_credentials && !onboarding.waiting_for_admin && !usesAppOnlyAuth(project) && (

Étape suivante : autorisez l'accès à votre compte{" "} {project?.source_provider === "microsoft" ? "Microsoft 365" : "Google Workspace"} pour lancer l'import de vos données.

)} {onboarding.has_migration_credentials && !onboarding.waiting_for_admin && (

Autorisation enregistrée — l'import progresse en arrière-plan.

)}
) } export function shouldShowOAuthButton( project: MigrationProject | undefined, onboarding: MigrationOnboardingHints | undefined, provider: "google" | "microsoft" ): boolean { if (!project || !onboarding) return false if (usesAppOnlyAuth(project)) return false if (onboarding.waiting_for_admin) return false if (project.source_provider !== provider) return false if (onboarding.has_migration_credentials) return false return onboarding.needs_user_oauth }