// 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<AnneeContextType>({
  annee: ANNEE_DEFAUT,
  setAnnee: () => {},
});

export function AnneeProvider({ children }: { children: ReactNode }) {
  const [annee, setAnneeState] = useState<number>(() => {
    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 (
    <AnneeContext.Provider value={{ annee, setAnnee }}>
      {children}
    </AnneeContext.Provider>
  );
}

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}`;
}
