(function registerFreeSeoLabView(global) {
  'use strict';

  function getApi() {
    return global.JS_API && global.JS_API.freeSeo;
  }

  function unwrap(response) {
    return response && response.data !== undefined ? response.data : response;
  }

  function formatDate(value) {
    if (!value) return 'Not available';
    try {
      return new Date(value).toLocaleString();
    } catch (error) {
      return value;
    }
  }

  function RecentRunList(props) {
    var React = global.React;
    var StatusBadge = global.FreeSeoRunStatusBadge;
    var runs = props && props.runs || [];
    if (!runs.length) {
      return React.createElement('div', { className: 'free-seo-empty' }, 'No Free SEO Lab runs yet. Start with a feature card when the related patch is installed.');
    }
    return React.createElement('div', { className: 'free-seo-recent-runs' }, runs.map(function mapRun(run) {
      return React.createElement('article', { key: run.collection + ':' + run.id, className: 'free-seo-recent-run' }, [
        React.createElement('div', { key: 'main' }, [
          React.createElement('strong', { key: 'id' }, run.id),
          React.createElement('span', { key: 'collection' }, run.collection || 'Free SEO run')
        ]),
        StatusBadge ? React.createElement(StatusBadge, { key: 'status', status: run.status }) : React.createElement('span', { key: 'status' }, run.status),
        React.createElement('time', { key: 'time', dateTime: run.createdAt || '' }, formatDate(run.createdAt))
      ]);
    }));
  }

  function AdapterStatusList(props) {
    var React = global.React;
    var adapters = props && props.adapters || {};
    var keys = Object.keys(adapters);
    if (!keys.length) return null;
    return React.createElement('div', { className: 'free-seo-adapter-grid' }, keys.map(function mapAdapter(key) {
      var adapter = adapters[key] || {};
      return React.createElement('div', { key: key, className: 'free-seo-adapter-card' }, [
        React.createElement('strong', { key: 'name' }, key),
        React.createElement('span', { key: 'mode' }, adapter.mode || 'local'),
        React.createElement('span', { key: 'availability', className: adapter.available ? 'is-available' : 'is-unavailable' }, adapter.available ? 'Available' : 'Unavailable'),
        adapter.remediation ? React.createElement('small', { key: 'remediation' }, adapter.remediation) : null
      ]);
    }));
  }

  function FreeSeoLabView(props) {
    var React = global.React;
    var useEffect = React.useEffect;
    var useState = React.useState;
    var FeatureCard = global.FreeSeoFeatureCard;
    var api = getApi();
    var initialCapabilities = props && props.capabilities || null;
    var initialRuns = props && props.recentRuns || [];
    var onOpenFeature = props && props.onOpenFeature || function defaultOpen(feature) {
      if (feature && feature.route) {
        global.location.hash = '#free-seo-lab:' + feature.id;
      }
    };

    var statePair = useState({ loading: !initialCapabilities, error: null, capabilities: initialCapabilities, recentRuns: initialRuns });
    var state = statePair[0];
    var setState = statePair[1];

    useEffect(function loadFreeSeoLab() {
      var cancelled = false;
      if (!api) {
        setState(function update(prev) {
          return Object.assign({}, prev, { loading: false, error: 'Free SEO API client is not loaded.' });
        });
        return function cleanup() { cancelled = true; };
      }
      Promise.all([
        api.capabilities(),
        api.recentRuns({ limit: 8 })
      ]).then(function handleResults(results) {
        if (cancelled) return;
        var capabilities = unwrap(results[0]);
        var recentRuns = unwrap(results[1]);
        setState({
          loading: false,
          error: null,
          capabilities: capabilities,
          recentRuns: recentRuns && recentRuns.items || []
        });
      }).catch(function handleError(error) {
        if (cancelled) return;
        setState(function update(prev) {
          return Object.assign({}, prev, { loading: false, error: error.message || 'Unable to load Free SEO Lab.' });
        });
      });
      return function cleanup() { cancelled = true; };
    }, []);

    if (state.loading) {
      return React.createElement('main', { className: 'free-seo-lab-view' }, React.createElement('p', null, 'Loading AI SEO Lab...'));
    }

    var capabilities = state.capabilities || { enabled: false, features: [], adapters: {} };
    var features = capabilities.features || [];

    return React.createElement('main', { className: 'free-seo-lab-view' }, [
      React.createElement('header', { key: 'header', className: 'free-seo-lab-header' }, [
        React.createElement('p', { key: 'eyebrow', className: 'eyebrow' }, 'Free SEO Lab'),
        React.createElement('h1', { key: 'title' }, 'AI SEO Lab'),
        React.createElement('p', { key: 'copy' }, 'Free-first SEO and GEO workflows that run locally, from uploads, or through optional self-hosted adapters. No paid API key is required for the base workflows.'),
        state.error ? React.createElement('div', { key: 'error', className: 'alert alert-error' }, state.error) : null
      ]),
      React.createElement('section', { key: 'features', className: 'free-seo-feature-grid', 'aria-label': 'Free SEO Lab features' }, features.map(function mapFeature(feature) {
        return FeatureCard
          ? React.createElement(FeatureCard, { key: feature.id, feature: feature, onOpen: onOpenFeature })
          : React.createElement('article', { key: feature.id }, feature.name);
      })),
      React.createElement('section', { key: 'adapters', className: 'free-seo-section' }, [
        React.createElement('h2', { key: 'title' }, 'Adapter status'),
        React.createElement(AdapterStatusList, { key: 'list', adapters: capabilities.adapters })
      ]),
      React.createElement('section', { key: 'recent', className: 'free-seo-section' }, [
        React.createElement('h2', { key: 'title' }, 'Recent runs'),
        React.createElement(RecentRunList, { key: 'list', runs: state.recentRuns })
      ])
    ]);
  }

  global.FreeSeoLabView = FreeSeoLabView;
  global.JiffyScoreViews = global.JiffyScoreViews || {};
  global.JiffyScoreViews.freeSeoLab = FreeSeoLabView;
})(typeof window !== 'undefined' ? window : globalThis);
