/** Lien membre ⇄ formation tel que l'API le sérialise : les années sont des chaînes, vide = toujours membre. */
export interface LienMembre {
  lfaAen: {aenId: number | string; aenLibelle: string};
  lfaDepuis?: string | number | null;
  lfaJusqua: string | number | null | undefined;
}

/**
 * Membres actuels (date de fin vide ou non échue, l'année en cours comprise) et anciens membres (spec L109).
 */
export function partitionMembres<T extends LienMembre>(membres: T[], annee = new Date().getFullYear()): {actuels: T[]; anciens: T[]} {
  const estActuel = (m: T) => {
    const fin = String(m.lfaJusqua ?? '').trim();
    return fin === '' || Number(fin) >= annee;
  };

  return {
    actuels: membres.filter(estActuel),
    anciens: membres.filter(m => !estActuel(m)),
  };
}

/** Clé GroupeDetailsPage du titre du bloc : « membres actuels » s'il en reste, sinon « historique des membres ». */
export function titreBlocMembres(nbActuels: number): 'actual_member' | 'history_member' {
  return nbActuels > 0 ? 'actual_member' : 'history_member';
}
