// AnneeContext.tsx — Contexte global pour l'année sélectionnée // Partagé entre toutes les pages : Renouvellement PC, CAPEX-Construction, CAPEX-Synthèse, DSI-OPEX import { createContext, useContext, useState, ReactNode } from 'react'; export const ANNEES_DISPONIBLES = [2025, 2026, 2027, 2028, 2029, 2030]; export const ANNEE_DEFAUT = 2027; const PARAMETRES_STORAGE_KEY = 'itinova_budget_parametres'; function getAnneeDefautFromParametres(): number { try { const raw = localStorage.getItem(PARAMETRES_STORAGE_KEY); if (raw) { const parsed = JSON.parse(raw); if (typeof parsed.anneeDefaut === 'number' && ANNEES_DISPONIBLES.includes(parsed.anneeDefaut)) { return parsed.anneeDefaut; } } } catch { /* ignore */ } return ANNEE_DEFAUT; } interface AnneeContextType { annee: number; setAnnee: (a: number) => void; } const AnneeContext = createContext({ annee: ANNEE_DEFAUT, setAnnee: () => {}, }); export function AnneeProvider({ children }: { children: ReactNode }) { const [annee, setAnneeState] = useState(() => { try { const stored = localStorage.getItem('itinova_annee_selectionnee'); if (stored) { const parsed = parseInt(stored, 10); if (ANNEES_DISPONIBLES.includes(parsed)) return parsed; } // Pas de session mémorisée → utiliser l'année par défaut des paramètres return getAnneeDefautFromParametres(); } catch { return ANNEE_DEFAUT; } }); const setAnnee = (a: number) => { setAnneeState(a); try { localStorage.setItem('itinova_annee_selectionnee', String(a)); } catch {} }; return ( {children} ); } export function useAnnee() { return useContext(AnneeContext); } // Génère la clé localStorage pour les saisies CAPEX d'une année donnée export function getCapexStorageKey(annee: number): string { return `itinova_budget_capex_${annee}`; } // Génère la clé localStorage pour les saisies OPEX d'une année donnée export function getOpexStorageKey(annee: number): string { return `itinova_budget_opex_${annee}`; }