(function (global) {
  const REQUIRED_TOP_LEVEL = [
    'metadata',
    'overview',
    'admissions',
    'academics',
    'career',
    'campus',
    'experiential',
    'fitScore',
    'financialPlanning',
    'application',
    'sections',
    'sources'
  ];

  function validateGeneratedProfile(profile) {
    const errors = [];

    if (!profile || typeof profile !== 'object' || Array.isArray(profile)) {
      return {
        valid: false,
        errors: ['Generated profile is not a valid JSON object.']
      };
    }

    REQUIRED_TOP_LEVEL.forEach(key => {
      if (!(key in profile)) {
        errors.push(`Missing ${key} section`);
      }
    });

    if (!profile.metadata || typeof profile.metadata !== 'object') {
      errors.push('Missing metadata section');
    } else if (!profile.metadata.id) {
      errors.push('Missing metadata.id');
    }

    if (!profile.admissions || typeof profile.admissions !== 'object') {
      errors.push('Missing admissions section');
    } else if (!Array.isArray(profile.admissions.applicationDeadlines)) {
      errors.push('Missing admissions.applicationDeadlines');
    }

    if (!Array.isArray(profile.sections)) {
      errors.push('Missing sections array');
    }

    return {
      valid: errors.length === 0,
      errors
    };
  }

  function createValidationResults(validation) {
    const container = document.createElement('section');
    container.className = 'ai-validation-results';

    const title = document.createElement('h3');
    title.className = 'ai-validation-title';
    title.textContent = 'Validation Results';
    container.appendChild(title);

    if (validation && validation.valid) {
      const list = document.createElement('ul');
      list.className = 'ai-validation-success-list';

      ['Profile structure valid', 'Required sections complete', 'Ready to save'].forEach(message => {
        const item = document.createElement('li');
        item.textContent = `✓ ${message}`;
        list.appendChild(item);
      });

      container.appendChild(list);
      return container;
    }

    const summary = document.createElement('p');
    summary.className = 'ai-validation-error-summary';
    summary.textContent = 'Profile validation failed';
    container.appendChild(summary);

    const issueList = document.createElement('ul');
    issueList.className = 'ai-validation-error-list';
    const issues = validation && Array.isArray(validation.errors) ? validation.errors : ['Unknown validation error'];

    issues.forEach(issue => {
      const item = document.createElement('li');
      item.textContent = issue;
      issueList.appendChild(item);
    });

    container.appendChild(issueList);
    return container;
  }

  function createQualityReportPanel(qaReport) {
    const container = document.createElement('section');
    container.className = 'ai-quality-report';

    const title = document.createElement('h3');
    title.className = 'ai-quality-title';
    title.textContent = 'Quality Report';
    container.appendChild(title);

    if (!qaReport || typeof qaReport !== 'object') {
      const pending = document.createElement('p');
      pending.className = 'ai-quality-pending';
      pending.textContent = 'Quality report pending...';
      container.appendChild(pending);
      return container;
    }

    const overall = document.createElement('div');
    overall.className = 'ai-quality-overall';
    overall.textContent = `Overall: ${qaReport.qualityScore}/100 • ${qaReport.status}`;
    container.appendChild(overall);

    const scoreBlock = document.createElement('div');
    scoreBlock.className = 'ai-quality-categories';
    const scoreHeading = document.createElement('h4');
    scoreHeading.textContent = 'Category Scores';
    scoreBlock.appendChild(scoreHeading);

    const scoreList = document.createElement('ul');
    scoreList.className = 'ai-quality-score-list';
    const categoryScores = qaReport.categoryScores && typeof qaReport.categoryScores === 'object'
      ? qaReport.categoryScores
      : {};

    Object.keys(categoryScores).forEach(category => {
      const item = document.createElement('li');
      item.textContent = `${category}: ${categoryScores[category]}`;
      scoreList.appendChild(item);
    });

    scoreBlock.appendChild(scoreList);
    container.appendChild(scoreBlock);

    const warnings = Array.isArray(qaReport.warnings) ? qaReport.warnings : [];
    const recommendations = Array.isArray(qaReport.recommendations) ? qaReport.recommendations : [];

    const warningsHeading = document.createElement('h4');
    warningsHeading.textContent = 'Warnings';
    container.appendChild(warningsHeading);

    if (warnings.length === 0) {
      const none = document.createElement('p');
      none.className = 'ai-quality-none';
      none.textContent = 'None';
      container.appendChild(none);
    } else {
      const warningList = document.createElement('ul');
      warningList.className = 'ai-quality-warning-list';
      warnings.forEach(warning => {
        const item = document.createElement('li');
        item.textContent = warning;
        warningList.appendChild(item);
      });
      container.appendChild(warningList);
    }

    const recHeading = document.createElement('h4');
    recHeading.textContent = 'Recommendations';
    container.appendChild(recHeading);

    if (recommendations.length === 0) {
      const none = document.createElement('p');
      none.className = 'ai-quality-none';
      none.textContent = 'None';
      container.appendChild(none);
    } else {
      const recList = document.createElement('ul');
      recList.className = 'ai-quality-recommendation-list';
      recommendations.forEach(recommendation => {
        const item = document.createElement('li');
        item.textContent = recommendation;
        recList.appendChild(item);
      });
      container.appendChild(recList);
    }

    return container;
  }

  global.CollegePlaybookAIValidationResults = {
    validateGeneratedProfile,
    createValidationResults,
    createQualityReportPanel
  };
})(window);
