'use client';

import { useEffect, useState } from 'react';
import { NoticePopupModal, isPopupDismissedForToday } from './NoticePopupModal';
import { getActivePopups } from './actions';
import type { NoticePopupData } from './NoticePopupModal';

/**
 * 활성 팝업을 자동으로 가져와 순차적으로 표시하는 컨테이너
 * - AuthenticatedLayout에 마운트
 * - 오늘 하루 안 보기 처리된 팝업은 건너뜀
 * - 여러 개일 경우 하나 닫으면 다음 팝업 표시
 */
export default function NoticePopupContainer() {
  const [popups, setPopups] = useState<NoticePopupData[]>([]);
  const [currentIndex, setCurrentIndex] = useState(0);
  const [open, setOpen] = useState(false);

  useEffect(() => {
    let cancelled = false;

    async function fetchPopups() {
      try {
        // localStorage에서 사용자 부서 ID 조회 (부서별 팝업 필터링용)
        const user = JSON.parse(localStorage.getItem('user') || '{}');
        const activePopups = await getActivePopups(user.department_id ?? undefined);

        if (cancelled) return;

        // 날짜 범위 + 오늘 하루 안 보기 필터링
        const today = new Date().toISOString().slice(0, 10); // YYYY-MM-DD
        const visiblePopups = activePopups
          .filter((p) => {
            // 기간 내 팝업만 (startDate~endDate)
            if (p.startDate && today < p.startDate) return false;
            if (p.endDate && today > p.endDate) return false;
            // 오늘 하루 안 보기 처리된 팝업 제외
            if (isPopupDismissedForToday(p.id)) return false;
            return true;
          })
          .map((p) => ({
            id: p.id,
            title: p.title,
            content: p.content,
          }));

        if (visiblePopups.length > 0) {
          setPopups(visiblePopups);
          setCurrentIndex(0);
          setOpen(true);
        }
      } catch {
        // 팝업 로드 실패 시 무시 (핵심 기능 아님)
      }
    }

    fetchPopups();

    return () => {
      cancelled = true;
    };
  }, []);

  const currentPopup = popups[currentIndex];

  if (!currentPopup) return null;

  const handleOpenChange = (isOpen: boolean) => {
    if (!isOpen) {
      // 다음 팝업이 있으면 표시
      const nextIndex = currentIndex + 1;
      if (nextIndex < popups.length) {
        setCurrentIndex(nextIndex);
        // 약간의 딜레이로 자연스러운 전환
        setTimeout(() => setOpen(true), 200);
      } else {
        setOpen(false);
      }
    } else {
      setOpen(true);
    }
  };

  return (
    <NoticePopupModal
      popup={currentPopup}
      open={open}
      onOpenChange={handleOpenChange}
    />
  );
}
