'use client';

import { basePath } from '@/utils/var';
import { usePathname } from 'next/navigation';
import { useEffect } from 'react';

export default function RoutePrefixHandle() {
  const pathname = usePathname();
  const handleRouteChange = () => {
    const addPrefixToImg = (e: HTMLImageElement) => {
      const url = new URL(e.src);
      const prefix = url.pathname.slice(0, basePath.length);
      if (
        prefix !== basePath &&
        !url.href.startsWith('blob:') &&
        !url.href.startsWith('data:') &&
        !url.href.startsWith('http')
      ) {
        url.pathname = basePath + url.pathname;
        e.src = url.toString();
      }
    };
    // create an observer instance
    const observer = new MutationObserver((mutationsList) => {
      for (const mutation of mutationsList) {
        if (mutation.type === 'childList') {
          // listen for newly added img tags
          mutation.addedNodes.forEach((node) => {
            if ((node as HTMLElement).tagName === 'IMG')
              addPrefixToImg(node as HTMLImageElement);
          });
        } else if (
          mutation.type === 'attributes' &&
          (mutation.target as HTMLElement).tagName === 'IMG'
        ) {
          // if the src of an existing img tag changes, update the prefix
          if (mutation.attributeName === 'src')
            addPrefixToImg(mutation.target as HTMLImageElement);
        }
      }
    });

    // configure observation options
    const config = {
      childList: true,
      attributes: true,
      subtree: true,
      attributeFilter: ['src'],
    };

    observer.observe(document.body, config);
  };

  useEffect(() => {
    if (basePath) handleRouteChange();
  }, [pathname]);

  return null;
}
