import { useCallback, useMemo } from 'react';
import { usePersistedState } from '../../../shared/hooks';
import { ANNOUNCEMENTS, LATEST_ANNOUNCEMENT_ID } from '../data/announcements';

/**
 * 공지 팝업 표시 여부를 판단하고 확인 처리를 담당하는 훅.
 *
 * localStorage 키: `wing:${userId}:lastSeenAnnouncementId`
 * 새 공지(LATEST_ANNOUNCEMENT_ID)가 저장값보다 크면 팝업을 표시한다.
 */
export function useAnnouncementPopup(userId: number | null) {
  const [lastSeenId, setLastSeenId] = usePersistedState<number>(
    userId,
    'lastSeenAnnouncementId',
    0,
  );

  /** 미확인 공지가 있는지 여부 */
  const hasUnread = LATEST_ANNOUNCEMENT_ID > lastSeenId;

  /** 미확인 공지 목록 */
  const unreadAnnouncements = useMemo(
    () => ANNOUNCEMENTS.filter((a) => a.id > lastSeenId),
    [lastSeenId],
  );

  /** "확인" 버튼 클릭 시 호출 — 최신 공지 ID를 저장 */
  const acknowledge = useCallback(() => {
    setLastSeenId(LATEST_ANNOUNCEMENT_ID);
  }, [setLastSeenId]);

  return { hasUnread, unreadAnnouncements, acknowledge };
}
