import { createNavigationContainerRef } from "@react-navigation/native";
import type { RootStackParamList } from "./types";

// Ref global sur le NavigationContainer : permet de naviguer depuis l'exterieur
// de l'arbre React (ex. le listener de tap sur une notification push, qui n'est
// pas un composant). Branche via <NavigationContainer ref={navigationRef}>.
export const navigationRef = createNavigationContainerRef<RootStackParamList>();

export type PlanningDay = "today" | "tomorrow";

/**
 * Ouvre le calendrier (ecran "Planning", imbrique dans "AppNavigator") sur le
 * bon jour. Retourne false si la navigation n'est pas prete OU si l'arbre
 * "AppNavigator" n'est pas encore monte (cold start avant restauration de
 * session) — l'appelant memorise alors la cible pour rejouer plus tard.
 */
export function navigateToPlanning(initialDay?: PlanningDay): boolean {
  if (!navigationRef.isReady()) {
    return false;
  }
  // navigate sur l'AppNavigator seulement s'il est dans l'etat courant : sinon
  // (Login/Onboarding affiches), on echoue proprement plutot que de crasher.
  const root = navigationRef.getRootState();
  const hasApp = root?.routeNames?.includes("AppNavigator");
  if (!hasApp) {
    return false;
  }
  navigationRef.navigate("AppNavigator", {
    screen: "Planning",
    params: initialDay ? { initialDay } : undefined,
  });
  return true;
}
