require(['browser-compat'], function(compat) {

  if (compat.browserInfo.isIE) {
    
    var handler = compat.executePageLoaded(function() {
      var loadingIndicator = document.getElementById('loading-indicator');

      if (loadingIndicator && loadingIndicator.parentNode) {
        loadingIndicator.parentNode.removeChild(loadingIndicator);
      }

      if (handler && handler.remove) {
        handler.remove();
      }
    });

    compat.createUpdatePrompt();

    return;
  }

  window.LOADED_START = performance.now();
  window.LOADED_FILE = document.getElementById('require').getAttribute('data-module');

  const PREFIX_PATH = compat.templatePath;

  const TEMPLATE_VERSION = '0.0.1';

  require.config({

    baseUrl: PREFIX_PATH,

    waitSeconds: 30,

    paths: {
      'domready': 'js/core/require-domready.min',
      'jquery': 'js/core/jquery.min',
      'gsap': 'js/core/gsap.min',
      'scrolltrigger': 'js/core/gsap-scrolltrigger.min',
      'scrollto': 'js/core/gsap-scrollto.min',
      'lozad': 'js/core/lozad.min',
      'smoothscroll': 'js/core/smoothscroll.min',
      'swiper': 'js/core/swiper-bundle.min',
      'pagination': 'js/core/pagination.min',
      'tools': 'js/util/tools',
      'main': 'js/module/main',
      'list': 'js/module/list',
      'single': 'js/module/single',
      'leader': 'js/module/leader',
      'organization': 'js/module/organization',
      'info': 'js/module/info',
      'common': 'js/module/common'
    },

    map: {
      '*':{
        'min':'js/core/require-css.min'
      }
    },

    shim: {
      'scrolltrigger': ['gsap'],
      'scrollto': ['gsap'],
      'pagination': ['jquery']
    },

    urlArgs: `ver=${TEMPLATE_VERSION}`

  });

  require([LOADED_FILE, 'common', 'tools', 'smoothscroll', 'min!css/base', 'min!css/media', 'domready!'], (...args) => {

    const tools = args[2];

    tools.useIdleCallback(() => {
      const loadedStart = window.LOADED_START;
      const executionTime = Math.max(0, performance.now() - loadedStart);
      const loadedDuration = executionTime < 1000 ? `${Math.round(executionTime)}ms` : `${(executionTime / 1000).toFixed(2)}s`;

      const logMessage = `%c------  🚀  Modules Loaded Completely In ${loadedDuration}  ✨  Template Version: ${TEMPLATE_VERSION}  ------`;

      const logStyle = [
        'font-size: 16px',
        'font-weight: bold',
        'font-style: italic',
        'font-family: Georgia',
        'line-height: 1.75em',
        'color: #ffffff',
        'background: linear-gradient(90deg, #00d3d6 0%, #66ccff 20%, #9999ff 40%, #b066ff 60%, #cc66ff 80%, #ff5eff 100%)',
        'padding: 0.75em 1.5em',
        'margin: 1em 0',
        'border-radius: 6px',
        'text-shadow: 1px 2px 3px rgba(0, 0, 0, 0.3)'
      ].join(';');

      console.log(logMessage, logStyle);
    });

    const throttledResize = tools.throttle(tools.resize, 150);

    window.addEventListener('resize', throttledResize);

    tools.injectFontFaces(PREFIX_PATH);
    tools.resize();

    const loaderContainer = document.querySelector('.page-loading-container');
    const loaderEle = document.querySelector('.loading-shade');
    const loaderBounce = document.querySelector('.loading-bounce');

    $('body').removeClass('pre-loading-hidden');

    const loaderTimeLine = gsap.timeline({
      onComplete: () => {
        loaderContainer.remove();
      }
    });

    loaderTimeLine.to(loaderEle, { scale: 1.5, opacity: 0, duration: 1 }).to(loaderBounce, { opacity: 0, duration: 1 }, 0);
  }, err => {
    console.error('模块加载失败:', err);
    document.querySelector('.page-loading-container').remove();
    document.body.classList.remove('pre-loading-hidden');
  });

});
