// /js/load-sidebar.js
import { getUser } from './auth.js';

/**
 * 사용자 역할에 따라 사이드바 메뉴 항목을 필터링합니다.
 * @param {Document} doc - 파싱된 HTML 문서 객체
 * @param {string} userRole - 현재 사용자의 역할
 */
function filterSidebarByRole(doc, userRole) {
  // 'system' 역할은 모든 메뉴를 볼 수 있으므로 필터링하지 않음
  if (userRole === 'system') {
    return;
  }
  
  // 역할과 그에 해당하는 클래스 선택자 매핑
  const roleClassMap = {
    admin: '.admin-only',
    leader: '.leader-only',
    user: '.user-only', // 또는 'worker-only' 등, sidebar.html에 정의된 클래스에 맞춰야 함
    support: '.support-only'
  };

  // 모든 역할 기반 선택자를 가져옴
  const allRoleSelectors = Object.values(roleClassMap).join(', ');
  const allRoleElements = doc.querySelectorAll(allRoleSelectors);

  allRoleElements.forEach(el => {
    // 요소가 현재 사용자 역할에 해당하는 클래스를 가지고 있는지 확인
    const userRoleSelector = roleClassMap[userRole];
    if (!userRoleSelector || !el.matches(userRoleSelector)) {
      el.remove();
    }
  });
}


document.addEventListener('DOMContentLoaded', async () => {
  const sidebarContainer = document.getElementById('sidebar-container');
  if (!sidebarContainer) return;

  const currentUser = getUser();
  if (!currentUser) return; // 비로그인 상태면 사이드바를 로드하지 않음

  try {
    const response = await fetch('/components/sidebar.html');
    if (!response.ok) {
      throw new Error(`사이드바 파일을 불러올 수 없습니다: ${response.statusText}`);
    }
    const htmlText = await response.text();

    // 1. 텍스트를 가상 DOM으로 파싱
    const parser = new DOMParser();
    const doc = parser.parseFromString(htmlText, 'text/html');

    // 2. DOM에 삽입하기 *전*에 역할에 따라 메뉴 필터링
    filterSidebarByRole(doc, currentUser.role);

    // 3. 수정 완료된 HTML을 실제 DOM에 삽입
    sidebarContainer.innerHTML = doc.body.innerHTML;


  } catch (error) {
    console.error(' 사이드바 로딩 실패:', error);
    sidebarContainer.innerHTML = '<p>메뉴 로딩 실패</p>';
  }
});