import { useEffect } from 'react';

interface PreloadOptions {
  images?: string[];
  scripts?: string[];
  styles?: string[];
  prefetch?: string[];
}

export function usePreload(options: PreloadOptions) {
  useEffect(() => {
    const { images = [], scripts = [], styles = [], prefetch = [] } = options;

    // Preload images
    images.forEach((src) => {
      const link = document.createElement('link');
      link.rel = 'preload';
      link.as = 'image';
      link.href = src;
      document.head.appendChild(link);
    });

    // Preload scripts
    scripts.forEach((src) => {
      const link = document.createElement('link');
      link.rel = 'preload';
      link.as = 'script';
      link.href = src;
      document.head.appendChild(link);
    });

    // Preload styles
    styles.forEach((href) => {
      const link = document.createElement('link');
      link.rel = 'preload';
      link.as = 'style';
      link.href = href;
      document.head.appendChild(link);
    });

    // Prefetch resources
    prefetch.forEach((href) => {
      const link = document.createElement('link');
      link.rel = 'prefetch';
      link.href = href;
      document.head.appendChild(link);
    });

    // Cleanup function
    return () => {
      // Remove preload links on cleanup
      const preloadLinks = document.querySelectorAll(
        'link[rel="preload"], link[rel="prefetch"]',
      );
      preloadLinks.forEach((link) => {
        if (link.parentNode) {
          link.parentNode.removeChild(link);
        }
      });
    };
  }, [options]);
}

// Hook pour preloader les routes
export function usePreloadRoute(routePath: string) {
  useEffect(() => {
    const link = document.createElement('link');
    link.rel = 'prefetch';
    link.href = routePath;
    document.head.appendChild(link);

    return () => {
      if (link.parentNode) {
        link.parentNode.removeChild(link);
      }
    };
  }, [routePath]);
}
