(function (global) {
  const DEFAULT_STEPS = [
    'Creating metadata',
    'Generating admissions',
    'Building academics',
    'Creating business analysis',
    'Creating soccer profile',
    'Writing consultant analysis'
  ];

  function createGenerationProgress(options) {
    const schoolName = options && options.schoolName ? options.schoolName : 'selected school';
    const container = document.createElement('section');
    container.className = 'ai-generation-progress';

    const title = document.createElement('h3');
    title.className = 'ai-generation-progress-title';
    title.textContent = `Generating ${schoolName}`;
    container.appendChild(title);

    const subtitle = document.createElement('p');
    subtitle.className = 'ai-generation-progress-subtitle';
    subtitle.textContent = 'This may take up to a minute. Steps update while generation is in progress.';
    container.appendChild(subtitle);

    const list = document.createElement('ol');
    list.className = 'ai-generation-progress-list';
    container.appendChild(list);

    const items = DEFAULT_STEPS.map(step => {
      const li = document.createElement('li');
      li.className = 'ai-progress-step pending';
      li.textContent = step;
      list.appendChild(li);
      return li;
    });

    let timer = null;
    let currentStep = 0;

    function setStep(index) {
      currentStep = Math.max(0, Math.min(index, items.length));
      items.forEach((item, itemIndex) => {
        const isDone = itemIndex < currentStep;
        const isActive = itemIndex === currentStep;

        item.classList.toggle('done', isDone);
        item.classList.toggle('active', isActive && !isDone);
        item.classList.toggle('pending', !isDone && !isActive);
        item.textContent = `${isDone ? '✓' : isActive ? '•' : '○'} ${DEFAULT_STEPS[itemIndex]}`;
      });
    }

    function startSimulation() {
      setStep(0);
      timer = setInterval(() => {
        if (currentStep >= items.length) {
          clearInterval(timer);
          timer = null;
          return;
        }
        setStep(currentStep + 1);
      }, 900);
    }

    function complete() {
      if (timer) {
        clearInterval(timer);
        timer = null;
      }
      setStep(items.length);
    }

    function stop() {
      if (timer) {
        clearInterval(timer);
        timer = null;
      }
    }

    return {
      element: container,
      startSimulation,
      complete,
      stop
    };
  }

  global.CollegePlaybookAIGenerationProgress = {
    createGenerationProgress
  };
})(window);
