/**
 * 페이지 이동 시 자동 로딩 처리 플러그인
 * 모든 페이지 이동에서 GlobalLoading을 자동으로 표시하고
 * DOM 렌더링 완료 후 자동으로 숨깁니다.
 */
export default defineNuxtPlugin(() => {
  const { startLoading } = useLoading();
  const router = useRouter();

  let loadingStopFn: (() => void) | null = null;
  let isNavigating = false;

  // 페이지 이동 시작 시 로딩 시작
  router.beforeEach((to, from) => {
    // 같은 페이지 내에서의 이동은 무시
    if (to.path === from.path) {
      return;
    }

    // 이미 로딩 중이면 무시
    if (isNavigating) {
      return;
    }

    isNavigating = true;
    loadingStopFn = startLoading("페이지를 불러오는 중...");
  });

  // 페이지 이동 완료 후 로딩 종료
  router.afterEach(() => {
    if (!isNavigating || !loadingStopFn) {
      return;
    }

    // DOM이 완전히 렌더링된 후 로딩 종료
    nextTick(() => {
      setTimeout(() => {
        loadingStopFn?.();
        loadingStopFn = null;
        isNavigating = false;
      }, 200);
    });
  });

  // 에러 발생 시 로딩 강제 종료
  router.onError(() => {
    if (loadingStopFn) {
      loadingStopFn();
      loadingStopFn = null;
      isNavigating = false;
    }
  });
});
