type IconName =
  | 'house'
  | 'map-pin'
  | 'award'
  | 'shield'
  | 'book-open'
  | 'log-in'
  | 'menu';

type Visibility =
  | 'always'
  | 'guest-only'
  | 'auth-only';

type MenuItem = {
  id: string;
  href: string;
  ico: IconName;
  label?: string;      // opzionale: il toggle utente non ha label
  visibility: Visibility;
};

export const ROLE = {
  ADMIN: 1,
  SUPERVISOR: 2,
  USER: 3,
  GUEST: 4,
} as const;

export type RoleId = (typeof ROLE)[keyof typeof ROLE];

// Array
const menu: MenuItem[] = [
  { id: 'homeLink', href: '/', ico: 'house', label: 'Home', visibility: 'always' },
  { id: 'mapLink', href: '/', ico: 'map-pin', label: 'Map', visibility: 'always' },
  { id: 'creditsLink', href: 'https://www.darklab.lu.se/digital-collections/dynamic-collections/credits/', ico: 'award', label: 'Credits', visibility: 'always' },
  { id: 'legalLink', href: '/policy', ico: 'shield', label: 'Legal', visibility: 'always' },
  { id: 'docsLink', href: 'https://lunddarklab.github.io/adc/', ico: 'book-open', label: 'Docs', visibility: 'always' },
  { id: 'loginLink', href: '/login', ico: 'log-in', label: 'Login', visibility: 'guest-only' },
  { id: 'userMenuToggle', href: '#', ico: 'menu', visibility: 'auth-only' },
];



export function getVisibleItems(isLoggedIn: boolean) {
  return menu.filter(item =>
    (item.visibility === 'always' ||
      (item.visibility === 'auth-only'  &&  isLoggedIn) ||
      (item.visibility === 'guest-only' && !isLoggedIn))
    );
}

// Tipi per sidebar
// type SidebarAction = 'logout';
// type SidebarItem = {
//   id?: string;
//   label: string;
//   ico: IconName;
//   href?: string;          // se presente, la voce è un link
//   action?: SidebarAction; // se presente, la voce è un pulsante con comportamento
// };

// Gruppo di voci del menu laterale. `roles` elenca i ruoli che vedono il gruppo:
// per spostare/aggiungere un link basta intervenire qui, senza toccare il DOM.
// type SidebarGroup = {
//   title?: string;         // titolo di sezione (header colorato); assente nel primo gruppo
//   roles: RoleId[];
//   items: SidebarItem[];
// };

// Menu laterale (utenti autenticati). I gruppi sono filtrati per ruolo:
// sposta una voce in un altro gruppo per cambiarne la visibilità.
// const ALL_AUTH: RoleId[] = [ROLE.ADMIN, ROLE.SUPERVISOR, ROLE.USER];