/* Jubair OS — React orchestrator (js/99-orchestrator.jsx)
 * Loads AFTER: 01-shell.js + all app files + React/ReactDOM/Babel.
 * Consumes the event bus from window.JubairOS and renders the full desktop.
 * Component functions are JSX (Babel standalone transpiles this file).
 */
(function () {
  'use strict';

  var _React = window.React;
  var useState = _React.useState;
  var useEffect = _React.useEffect;
  var useRef = _React.useRef;
  var useCallback = _React.useCallback;

  /* -----------------------------------------------------------------------
   * Helpers
   * ---------------------------------------------------------------------- */
  function clone(obj) { return JSON.parse(JSON.stringify(obj || {})); }

  function fmtClock() {
    try {
      var n = new Date();
      var h = n.getHours(), m = n.getMinutes(), ampm = h >= 12 ? 'PM' : 'AM';
      var h12 = h % 12 || 12;
      var mm = (m < 10 ? '0' : '') + m;
      return h12 + ':' + mm + ' ' + ampm;
    } catch (e) { return ''; }
  }

  function fmtDay() {
    try {
      var n = new Date();
      var days = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'];
      var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
      return days[n.getDay()] + ' ' + months[n.getMonth()] + ' ' + n.getDate();
    } catch (e) { return ''; }
  }

  /* -----------------------------------------------------------------------
   * Sub-components
   * ---------------------------------------------------------------------- */

  /* ---- BootScreen ---- */
  function BootScreen(_a) {
    var onDone = _a.onDone;
    useEffect(function() {
      var t = setTimeout(onDone, 1800);
      return function() { clearTimeout(t); };
    }, []);
    return _React.createElement('div', { className: 'jbos-boot' },
      _React.createElement('div', { className: 'jbos-boot-logo' }, 'J'),
      _React.createElement('div', { className: 'jbos-boot-name' }, 'Jubair OS'),
      _React.createElement('div', { className: 'jbos-boot-bar' },
        _React.createElement('div', { className: 'jbos-boot-fill', style: { transition: 'width 1.6s ease', width: '100%' } })
      )
    );
  }

  /* ---- MenuBar ---- */
  function MenuBar(_a) {
    var onSpotlight = _a.onSpotlight;
    var onCC = _a.onCC;
    var onNC = _a.onNC;
    var activeApp = _a.activeApp;
    var onOpenApp = _a.onOpenApp;

    var _b = useState(null), menu = _b[0], setMenu = _b[1];
    var _c = useState(false), ccOpen = _c[0], setCCOpen = _c[1];
    var _d = useState(false), ncOpen = _d[0], setNCOpen = _d[1];
    var _e = useState(fmtClock()), clock = _e[0], setClock = _e[1];

    useEffect(function() {
      var iv = setInterval(function() {
        setClock(fmtClock());
      }, 5000);
      return function() { clearInterval(iv); };
    }, []);

    useEffect(function() {
      function h(e) {
        if (!e.target || !e.target.closest('.jbos-menubar, .jbos-dropdown')) {
          setMenu(null);
          setCCOpen(false);
          setNCOpen(false);
        }
      }
      window.addEventListener('click', h);
      return function() { window.removeEventListener('click', h); };
    }, []);

    function toggleMenu(id) {
      setMenu(function(m) { return m === id ? null : id; });
      setCCOpen(false);
      setNCOpen(false);
    }
    function closeAll() { setMenu(null); setCCOpen(false); setNCOpen(false); }

    var menus = {
      apple: [
        { label: 'About This Jubair OS', action: function() { closeAll(); onOpenApp('about'); } },
        { sep: true },
        { label: 'System Settings…', action: function() { closeAll(); onOpenApp('settings'); } },
        { label: 'App Store…', action: function() { closeAll(); onOpenApp('appstore'); } },
        { sep: true },
        { label: 'Recent Items ▸', sub: [
          { label: 'Finder', action: function() { closeAll(); onOpenApp('finder'); } },
          { label: 'Safari', action: function() { closeAll(); onOpenApp('safari'); } },
          { label: 'Music', action: function() { closeAll(); onOpenApp('music'); } },
        ]},
        { sep: true },
        { label: 'Force Quit…', action: function() { closeAll(); onOpenApp('activity'); } },
        { sep: true },
        { label: 'Sleep', action: closeAll },
        { label: 'Restart…', action: closeAll },
        { label: 'Shut Down…', action: closeAll },
      ],
      file: [
        { label: 'New Window', shortcut: '⌘N', action: function() { closeAll(); onOpenApp('finder'); } },
        { sep: true },
        { label: 'New Folder', shortcut: '⇧⌘N', action: function() { closeAll(); onOpenApp('finder'); } },
        { label: 'New Tab', shortcut: '⌘T', action: closeAll },
        { sep: true },
        { label: 'Close Window', shortcut: '⌘W', action: function() { closeAll(); try { if (window.JubairOS && window.JubairOS.activeId) window.JubairOS.closeApp(window.JubairOS.activeId); } catch(e) {} } },
        { sep: true },
        { label: 'Get Info', action: closeAll },
      ],
      edit: [
        { label: 'Undo', shortcut: '⌘Z', action: closeAll },
        { label: 'Redo', shortcut: '⇧⌘Z', action: closeAll },
        { sep: true },
        { label: 'Cut', shortcut: '⌘X', action: closeAll },
        { label: 'Copy', shortcut: '⌘C', action: closeAll },
        { label: 'Paste', shortcut: '⌘V', action: closeAll },
        { label: 'Select All', shortcut: '⌘A', action: closeAll },
      ],
      view: [
        { label: 'as Icons', action: closeAll },
        { label: 'as List', action: closeAll },
        { sep: true },
        { label: 'Show Path Bar', action: closeAll },
        { label: 'Show Status Bar', action: closeAll },
        { sep: true },
        { label: 'Enter Full Screen', shortcut: '⌃⌘F', action: closeAll },
      ],
      window: [
        { label: 'Minimize', shortcut: '⌘M', action: function() { closeAll(); try { if (window.JubairOS && window.JubairOS.activeId) window.JubairOS.minimizeApp(window.JubairOS.activeId); } catch(e) {} } },
        { label: 'Maximize', action: function() { closeAll(); try { if (window.JubairOS && window.JubairOS.activeId) window.JubairOS.toggleMaximize(window.JubairOS.activeId); } catch(e) {} } },
        { sep: true },
        { label: 'Bring All to Front', action: closeAll },
      ],
      help: [
        { label: 'Jubair OS Help', action: function() { closeAll(); onOpenApp('help'); } },
        { sep: true },
        { label: 'Finder Help', action: function() { closeAll(); onOpenApp('finder'); } },
        { label: 'Safari Help', action: function() { closeAll(); onOpenApp('safari'); } },
      ]
    };

    var appMenus = {
      finder: [
        { label: 'About Finder', action: closeAll },
        { sep: true },
        { label: 'Preferences…', shortcut: '⌘,', action: function() { closeAll(); onOpenApp('settings'); } },
        { sep: true },
        { label: 'Empty Trash…', action: function() { closeAll(); try { window.JubairOS && window.JubairOS.showNotification && window.JubairOS.showNotification('Trash', 'Trash is already empty.'); } catch(e) {} } },
      ],
      safari: [
        { label: 'About Safari', action: closeAll },
        { sep: true },
        { label: 'Preferences…', action: function() { closeAll(); onOpenApp('settings'); } },
        { sep: true },
        { label: 'Clear History…', action: closeAll },
      ],
      settings: [
        { label: 'About macOS Sequoia', action: function() { closeAll(); onOpenApp('about'); } },
      ]
    };

    var allMenus = Object.assign({}, menus, appMenus);

    function renderMenuItem(it) {
      if (it.sep) return _React.createElement('div', { key: Math.random(), className: 'jbos-dropdown-sep' });
      var sub = it.sub ? _React.createElement('span', { style: { marginLeft: 8, opacity: 0.6 } }, '▸') : null;
      return _React.createElement('div', {
        key: it.label,
        className: 'jbos-dropdown-item',
        onClick: it.action
      },
        _React.createElement('span', null, it.label),
        sub,
        it.shortcut ? _React.createElement('span', { className: 'jbos-dropdown-shortcut' }, it.shortcut) : null
      );
    }

    var appDef = activeApp ? (window.JubairOSApps || {})[activeApp] : null;
    var appMenuItems = activeApp && appMenus[activeApp] ? appMenus[activeApp] : (activeApp && allMenus.file ? menus.file : null);
    var appName = appDef ? appDef.name : 'Jubair OS';

    var menuItems = menu && allMenus[menu] ? allMenus[menu] : null;

    return _React.createElement('div', { className: 'jbos-menubar' },
      /* LEFT */
      _React.createElement('div', { className: 'jbos-menubar-left' },
        /* Apple logo */
        _React.createElement('div', {
          className: 'jbos-logo jbos-menu-item' + (menu === 'apple' ? ' open' : ''),
          onClick: function(e) { e.stopPropagation(); toggleMenu('apple'); },
          title: 'Apple menu'
        }, '🍎'),
        /* App-specific menus */
        appMenuItems ? _React.createElement('div', {
          className: 'jbos-menu-item jbos-appname' + (menu === 'app' ? ' open' : ''),
          onClick: function(e) { e.stopPropagation(); toggleMenu('app'); },
          title: appName
        }, appName) : null,
        /* File */
        _React.createElement('div', {
          className: 'jbos-menu-item' + (menu === 'file' ? ' open' : ''),
          onClick: function(e) { e.stopPropagation(); toggleMenu('file'); }
        }, 'File'),
        /* Edit */
        _React.createElement('div', {
          className: 'jbos-menu-item hide-mobile' + (menu === 'edit' ? ' open' : ''),
          onClick: function(e) { e.stopPropagation(); toggleMenu('edit'); }
        }, 'Edit'),
        /* View */
        _React.createElement('div', {
          className: 'jbos-menu-item hide-mobile' + (menu === 'view' ? ' open' : ''),
          onClick: function(e) { e.stopPropagation(); toggleMenu('view'); }
        }, 'View'),
        /* Window */
        _React.createElement('div', {
          className: 'jbos-menu-item hide-mobile' + (menu === 'window' ? ' open' : ''),
          onClick: function(e) { e.stopPropagation(); toggleMenu('window'); }
        }, 'Window'),
        /* Help */
        _React.createElement('div', {
          className: 'jbos-menu-item hide-mobile' + (menu === 'help' ? ' open' : ''),
          onClick: function(e) { e.stopPropagation(); toggleMenu('help'); }
        }, 'Help'),
      ),
      /* RIGHT */
      _React.createElement('div', { className: 'jbos-menubar-right' },
        /* Spotlight */
        _React.createElement('div', {
          className: 'jbos-status-icon hide-mobile',
          onClick: onSpotlight,
          title: 'Spotlight (⌘Space)',
          style: { cursor: 'pointer' }
        }, '🔍'),
        /* Control Center */
        _React.createElement('div', {
          className: 'jbos-status-icon',
          onClick: function(e) { e.stopPropagation(); setCCOpen(function(o) { return !o; }); setNCOpen(false); setMenu(null); },
          title: 'Control Center'
        }, '⚡'),
        /* Notification Center */
        _React.createElement('div', {
          className: 'jbos-status-icon',
          onClick: function(e) { e.stopPropagation(); setNCOpen(function(o) { return !o; }); setCCOpen(false); setMenu(null); },
          title: 'Notification Center'
        }, '🔔'),
        /* Battery */
        _React.createElement('div', { className: 'jbos-battery', 'data-level': 87 }, '🔋 87%'),
        /* Wi-Fi */
        _React.createElement('div', { className: 'jbos-wifi' }, '📶'),
        /* Clock */
        _React.createElement('div', { id: 'jbos-clock' }, fmtDay() + '  ' + clock),
      ),
      /* Dropdown menu */
      menuItems ? _React.createElement('div', { className: 'jbos-dropdown lg-glass-strong' },
        menuItems.map(function(it) { return renderMenuItem(it); })
      ) : null
    );
  }

  /* ---- Dock ---- */
  function Dock(_a) {
    var apps = _a.apps;
    var onOpenApp = _a.onOpenApp;
    var openWindows = _a.openWindows;
    var onOpenLaunchpad = _a.onOpenLaunchpad;

    return _React.createElement('div', { className: 'jbos-dock-wrap' },
      _React.createElement('div', { className: 'jbos-dock lg-glass' },
        apps.map(function(app) {
          var isOpen = openWindows.some(function(w) { return w.appId === app.id; });
          return _React.createElement('div', {
            key: app.id,
            className: 'jbos-dock-icon',
            onClick: function() { onOpenApp(app.id); },
            title: app.name + (isOpen ? ' (running)' : ''),
          },
            _React.createElement('span', null, app.icon),
            isOpen ? _React.createElement('div', { className: 'jbos-dock-dot' }) : null,
            _React.createElement('div', { className: 'jbos-dock-tooltip jbos-dropdown-item lg-glass-strong' }, app.name)
          );
        }),
        _React.createElement('div', { className: 'jbos-dock-sep' }),
        /* Launchpad */
        _React.createElement('div', {
          className: 'jbos-dock-icon',
          onClick: onOpenLaunchpad,
          title: 'Launchpad'
        },
          _React.createElement('span', null, '🚀'),
          _React.createElement('div', { className: 'jbos-dock-tooltip jbos-dropdown-item lg-glass-strong' }, 'Launchpad')
        ),
        /* System Settings */
        _React.createElement('div', {
          className: 'jbos-dock-icon',
          onClick: function() { onOpenApp('settings'); },
          title: 'System Settings'
        },
          _React.createElement('span', null, '⚙️'),
          _React.createElement('div', { className: 'jbos-dock-tooltip jbos-dropdown-item lg-glass-strong' }, 'System Settings')
        ),
        _React.createElement('div', { className: 'jbos-dock-sep' }),
        /* Trash */
        _React.createElement('div', {
          className: 'jbos-dock-icon jbos-dock-trash',
          onClick: function() {
            try { window.JubairOS && window.JubairOS.showNotification && window.JubairOS.showNotification('Trash', 'Trash is empty.'); } catch(e) {}
          },
          title: 'Trash'
        },
          _React.createElement('span', null, '🗑️'),
          _React.createElement('div', { className: 'jbos-dock-tooltip jbos-dropdown-item lg-glass-strong' }, 'Trash')
        )
      )
    );
  }

  /* ---- Window chrome + component ---- */
  function WindowFrame(_a) {
    var win = _a.win;
    var onFocus = _a.onFocus;
    var onClose = _a.onClose;
    var onMinimize = _a.onMinimize;
    var onMaximize = _a.onMaximize;
    var isFocused = _a.isFocused;
    var winStyle = _a.winStyle;

    var appDef = (window.JubairOSApps || {})[win.appId] || {};
    var componentName = appDef.component || '';
    var ComponentFn = window[componentName] || null;

    var dragState = useRef({ dragging: false, startX: 0, startY: 0, origX: 0, origY: 0 });
    var windowRef = useRef(null);

    function onTitlebarMouseDown(e) {
      if (e.target.closest('.mac-traffic') || e.target.closest('.mac-toolbar')) return;
      if (win.maximized) return;
      dragState.current = {
        dragging: true,
        startX: e.clientX,
        startY: e.clientY,
        origX: parseInt(windowRef.current.style.left) || 0,
        origY: parseInt(windowRef.current.style.top) || 0
      };
      e.preventDefault();
    }

    useEffect(function() {
      function onMove(e) {
        if (!dragState.current.dragging) return;
        var ds = dragState.current;
        var dx = e.clientX - ds.startX;
        var dy = e.clientY - ds.startY;
        if (windowRef.current) {
          windowRef.current.style.left = (ds.origX + dx) + 'px';
          windowRef.current.style.top = (ds.origY + dy) + 'px';
        }
      }
      function onUp() {
        dragState.current.dragging = false;
      }
      window.addEventListener('mousemove', onMove);
      window.addEventListener('mouseup', onUp);
      return function() {
        window.removeEventListener('mousemove', onMove);
        window.removeEventListener('mouseup', onUp);
      };
    }, []);

    return _React.createElement('div', {
      ref: windowRef,
      className: 'mac-window ' + (isFocused ? 'focused' : 'inactive') + (win.maximized ? ' maximized' : ''),
      style: Object.assign({
        position: 'absolute',
        left: (win.maximized ? 0 : (win.x || 80)),
        top: (win.maximized ? 0 : (win.y || 40)),
        width: (win.maximized ? '100%' : (win.w || appDef.width || 720)),
        height: (win.maximized ? 'calc(100vh - 30px)' : (win.h || appDef.height || 480)),
        zIndex: win.z || 10
      }, winStyle),
      onMouseDown: function() { onFocus(win.winId); }
    },
      /* Titlebar */
      _React.createElement('div', {
        className: 'mac-titlebar',
        onMouseDown: onTitlebarMouseDown
      },
        /* Traffic lights */
        _React.createElement('div', { className: 'mac-traffic' },
          _React.createElement('div', {
            className: 'mac-light close',
            onClick: function(e) { e.stopPropagation(); onClose(win.winId); },
            title: 'Close'
          }),
          _React.createElement('div', {
            className: 'mac-light min',
            onClick: function(e) { e.stopPropagation(); onMinimize(win.winId); },
            title: 'Minimize'
          }),
          _React.createElement('div', {
            className: 'mac-light max',
            onClick: function(e) { e.stopPropagation(); onMaximize(win.winId); },
            title: 'Maximize'
          })
        ),
        /* Title */
        _React.createElement('div', { className: 'mac-title' }, win.title || appDef.name || win.appId),
        /* Toolbar slot */
        _React.createElement('div', { className: 'mac-toolbar' })
      ),
      /* Body */
      _React.createElement('div', { className: 'mac-window-body' },
        ComponentFn ? _React.createElement(ComponentFn, { winId: win.winId, appId: win.appId }) : _React.createElement('div', {
          style: { padding: 20, textAlign: 'center', color: '#888' }
        }, 'App not found: ' + win.appId)
      ),
      /* Resize handle */
      win.maximized ? null : _React.createElement('div', { className: 'mac-resize' })
    );
  }

  /* ---- Spotlight ---- */
  function SpotlightOverlay(_a) {
    var onClose = _a.onClose;
    var onOpenApp = _a.onOpenApp;
    var _b = useState(''), query = _b[0], setQuery = _b[1];
    var _c = useState([]), results = _c[0], setResults = _c[1];
    var inputRef = useRef(null);

    useEffect(function() {
      if (inputRef.current) inputRef.current.focus();
    }, []);

    useEffect(function() {
      if (!query.trim()) { setResults([]); return; }
      try {
        var hits = window.JubairOS && window.JubairOS.spotlightSearch ? window.JubairOS.spotlightSearch(query) : [];
        setResults(hits);
      } catch(e) { setResults([]); }
    }, [query]);

    function onKey(e) {
      if (e.key === 'Escape') onClose();
    }

    return _React.createElement('div', { className: 'jbos-spotlight-backdrop', onClick: onClose },
      _React.createElement('div', { className: 'jbos-spotlight lg-glass-strong', onClick: function(e) { e.stopPropagation(); } },
        _React.createElement('div', { className: 'jbos-spotlight-bar' },
          _React.createElement('span', null, '🔍'),
          _React.createElement('input', {
            ref: inputRef,
            className: 'jbos-spotlight-input',
            value: query,
            onChange: function(e) { setQuery(e.target.value); },
            onKeyDown: onKey,
            placeholder: 'Search Jubair OS…'
          }),
          query ? _React.createElement('button', {
            onClick: function() { setQuery(''); },
            style: { background: 'none', border: 'none', cursor: 'pointer', opacity: 0.5, fontSize: 16 }
          }, '✕') : null
        ),
        results.length > 0 ? _React.createElement('div', { className: 'jbos-spotlight-results' },
          results.map(function(r, i) {
            return _React.createElement('div', {
              key: r.id || i,
              className: 'jbos-spotlight-row',
              onClick: function() {
                try {
                  if (r.kind === 'app') { onOpenApp(r.id); onClose(); }
                  else if (r.kind === 'action') { try { window.JubairOS && window.JubairOS.runSpotlightResult && window.JubairOS.runSpotlightResult(r.id); } catch(e) {} onClose(); }
                } catch(e) {}
              }
            },
              _React.createElement('span', { className: 'app-icon' }, r.icon || '📦'),
              _React.createElement('span', null, r.name),
              _React.createElement('span', { className: 'jbos-spotlight-kind' }, r.category || r.kind || '')
            );
          })
        ) : query.trim() ? _React.createElement('div', { className: 'jbos-spotlight-empty' }, 'No results for "' + query + '"') : null
      )
    );
  }

  /* ---- Launchpad ---- */
  function LaunchpadOverlay(_a) {
    var onClose = _a.onClose;
    var onOpenApp = _a.onOpenApp;
    var apps = _a.apps;
    var _b = useState(''), query = _b[0], setQuery = _b[1];

    var filtered = query.trim() ? apps.filter(function(a) {
      var s = (a.name + ' ' + a.id).toLowerCase();
      return s.indexOf(query.toLowerCase()) !== -1;
    }) : apps;

    return _React.createElement('div', { className: 'jbos-launchpad', onClick: onClose },
      _React.createElement('input', {
        className: 'jbos-launchpad-search',
        value: query,
        onChange: function(e) { setQuery(e.target.value); },
        placeholder: 'Search apps…',
        onClick: function(e) { e.stopPropagation(); }
      }),
      _React.createElement('div', { className: 'jbos-launchpad-grid' },
        filtered.map(function(app) {
          return _React.createElement('div', {
            key: app.id,
            className: 'jbos-lp-app',
            onClick: function(e) { e.stopPropagation(); onOpenApp(app.id); onClose(); }
          },
            _React.createElement('div', { className: 'jbos-lp-icon' }, app.icon || '📦'),
            _React.createElement('div', { className: 'jbos-lp-name' }, app.name)
          );
        })
      )
    );
  }

  /* ---- Control Center ---- */
  function ControlCenter(_a) {
    var onClose = _a.onClose;
    var _b = useState(function() {
      try { return window.JubairOS && window.JubairOS.isDark ? window.JubairOS.isDark() : false; } catch(e) { return false; }
    }), dark = _b[0], setDark = _b[1];
    var _c = useState(function() {
      try { return window.JubairOS && window.JubairOS.getBrightness ? window.JubairOS.getBrightness() : 1; } catch(e) { return 1; }
    }), brightness = _c[0], setBrightness = _c[1];
    var _d = useState(function() {
      try { return window.JubairOS && window.JubairOS.getVolume ? window.JubairOS.getVolume() : 0.7; } catch(e) { return 0.7; }
    }), volume = _d[0], setVolume = _d[1];

    function toggleDark() {
      try {
        var nd = window.JubairOS && window.JubairOS.toggleDark ? window.JubairOS.toggleDark() : !dark;
        setDark(nd);
      } catch(e) { setDark(function(d) { return !d; }); }
    }
    function setB(v) {
      try { if (window.JubairOS && window.JubairOS.setBrightness) window.JubairOS.setBrightness(v); } catch(e) {}
      setBrightness(v);
    }
    function setV(v) {
      try { if (window.JubairOS && window.JubairOS.setVolume) window.JubairOS.setVolume(v); } catch(e) {}
      setVolume(v);
    }

    return _React.createElement('div', { className: 'jbos-cc lg-glass-strong', onClick: function(e) { e.stopPropagation(); } },
      /* Wi-Fi + Bluetooth row */
      _React.createElement('div', { className: 'jbos-cc-grid' },
        _React.createElement('div', { className: 'jbos-cc-card jbos-cc-toggle on' },
          _React.createElement('div', { className: 'jbos-cc-dot' }, '📶'),
          _React.createElement('div', null,
            _React.createElement('span', { className: 'jbos-cc-label' }, 'Wi-Fi'),
            _React.createElement('span', { className: 'jbos-cc-sub' }, 'Connected')
          )
        ),
        _React.createElement('div', { className: 'jbos-cc-card jbos-cc-toggle on' },
          _React.createElement('div', { className: 'jbos-cc-dot' }, '🔵'),
          _React.createElement('div', null,
            _React.createElement('span', { className: 'jbos-cc-label' }, 'Bluetooth'),
            _React.createElement('span', { className: 'jbos-cc-sub' }, 'On')
          )
        ),
        _React.createElement('div', { className: 'jbos-cc-card jbos-cc-toggle' },
          _React.createElement('div', { className: 'jbos-cc-dot' }, '✈️'),
          _React.createElement('div', null,
            _React.createElement('span', { className: 'jbos-cc-label' }, 'AirDrop'),
            _React.createElement('span', { className: 'jbos-cc-sub' }, 'Off')
          )
        ),
        _React.createElement('div', { className: 'jbos-cc-card jbos-cc-toggle' + (dark ? ' on' : ''), onClick: toggleDark },
          _React.createElement('div', { className: 'jbos-cc-dot' }, dark ? '🌙' : '☀️'),
          _React.createElement('div', null,
            _React.createElement('span', { className: 'jbos-cc-label' }, dark ? 'Dark Mode' : 'Light Mode'),
            _React.createElement('span', { className: 'jbos-cc-sub' }, 'Click to toggle')
          )
        )
      ),
      /* Volume */
      _React.createElement('div', { className: 'jbos-cc-slider-row' },
        _React.createElement('label', null, '🔊 Volume'),
        _React.createElement('input', {
          type: 'range', className: 'mac-slider', min: 0, max: 1, step: 0.01,
          value: volume,
          onChange: function(e) { setV(parseFloat(e.target.value)); }
        })
      ),
      /* Brightness */
      _React.createElement('div', { className: 'jbos-cc-slider-row' },
        _React.createElement('label', null, '☀️ Brightness'),
        _React.createElement('input', {
          type: 'range', className: 'mac-slider', min: 0.4, max: 1, step: 0.05,
          value: brightness,
          onChange: function(e) { setB(parseFloat(e.target.value)); }
        })
      ),
      /* Focus / DND */
      _React.createElement('div', { className: 'jbos-cc-card jbos-cc-toggle', style: { marginTop: 10 },
        onClick: function() {
          try { window.JubairOS && window.JubairOS.showNotification && window.JubairOS.showNotification('Focus', 'Do Not Disturb activated.'); } catch(e) {}
        }
      },
        _React.createElement('div', { className: 'jbos-cc-dot' }, '🌙'),
        _React.createElement('div', null,
          _React.createElement('span', { className: 'jbos-cc-label' }, 'Do Not Disturb'),
          _React.createElement('span', { className: 'jbos-cc-sub' }, 'Silence notifications')
        )
      ),
      /* Screen mirroring */
      _React.createElement('div', { className: 'jbos-cc-card jbos-cc-toggle', style: { marginTop: 10 },
        onClick: function() {
          try { window.JubairOS && window.JubairOS.showNotification && window.JubairOS.showNotification('Display', 'Screen mirroring options.'); } catch(e) {}
        }
      },
        _React.createElement('div', { className: 'jbos-cc-dot' }, '🖥️'),
        _React.createElement('div', null,
          _React.createElement('span', { className: 'jbos-cc-label' }, 'Screen Mirroring'),
          _React.createElement('span', { className: 'jbos-cc-sub' }, 'No displays')
        )
      )
    );
  }

  /* ---- NotificationCenter ---- */
  function NotificationCenter(_a) {
    var onClose = _a.onClose;
    var notifications = _a.notifications || [];
    var _b = useState(new Date()), now = _b[0];
    useEffect(function() {
      var iv = setInterval(function() { setNow(new Date()); }, 60000);
      return function() { clearInterval(iv); };
    }, []);

    var days = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
    var months = ['January','February','March','April','May','June','July','August','September','October','November','December'];

    return _React.createElement('div', { className: 'jbos-nc lg-glass-strong', onClick: function(e) { e.stopPropagation(); } },
      _React.createElement('div', { className: 'jbos-nc-date' },
        _React.createElement('div', { style: { fontSize: 32, fontWeight: 700, lineHeight: 1 } }, now.getDate()),
        _React.createElement('div', { style: { fontSize: 13, opacity: 0.7 } },
          days[now.getDay()] + ', ' + months[now.getMonth()] + ' ' + now.getFullYear()
        )
      ),
      /* Weather widget */
      _React.createElement('div', { className: 'jbos-nc-widget', style: { background: 'linear-gradient(135deg,#667eea,#764ba2)', color: '#fff' } },
        _React.createElement('h4', null, 'Weather'),
        _React.createElement('div', { style: { fontSize: 28, fontWeight: 700 } }, '28°C'),
        _React.createElement('div', { style: { fontSize: 13, opacity: 0.85 } }, 'Dhaka, Bangladesh — Partly cloudy')
      ),
      /* Stocks widget */
      _React.createElement('div', { className: 'jbos-nc-widget', style: { background: 'linear-gradient(135deg,#11998e,#38ef7d)', color: '#fff' } },
        _React.createElement('h4', null, 'Markets'),
        _React.createElement('div', { style: { fontSize: 20, fontWeight: 700 } }, 'AAPL $182.5'),
        _React.createElement('div', { style: { fontSize: 13, opacity: 0.85 } }, 'Jubair OS Portfolio — Demo Data')
      ),
      /* Notifications */
      notifications.length > 0 ? _React.createElement('div', null,
        _React.createElement('h4', { style: { fontSize: 12, textTransform: 'uppercase', letterSpacing: '0.04em', opacity: 0.6, margin: '12px 6px 4px' } }, 'Notifications'),
        notifications.slice(0, 5).map(function(n) {
          return _React.createElement('div', { key: n.id, className: 'jbos-nc-item lg-glass' },
            _React.createElement('h5', null, n.title),
            _React.createElement('p', null, n.body)
          );
        })
      ) : _React.createElement('div', { style: { textAlign: 'center', padding: 20, opacity: 0.5, fontSize: 13 } },
        'No new notifications'
      )
    );
  }

  /* -----------------------------------------------------------------------
   * Root: JubairOSDesktop
   * ---------------------------------------------------------------------- */
  function JubairOSDesktop() {
    var _a = useState(false), booted = _a[0], setBooted = _a[1];
    var _b = useState([]), windows = _b[0], setWindows = _b[1];
    var _c = useState([]), apps = _c[0], setApps = _c[1];
    var _d = useState([]), notifications = _d[0], setNotifications = _d[1];
    var _e = useState(false), spotlightOpen = _e[0], setSpotlightOpen = _e[1];
    var _f = useState(false), launchpadOpen = _f[0], setLaunchpadOpen = _f[1];
    var _g = useState(false), ccOpen = _g[0], setCCOpen = _g[1];
    var _h = useState(false), ncOpen = _h[0], setNCOpen = _h[1];
    var _j = useState(null), activeApp = _j[0], setActiveApp = _j[1];

    /* Subscribe to shell events */
    useEffect(function() {
      try {
        var off1 = window.JubairOS && window.JubairOS.on ? window.JubairOS.on('windows', function(wins) { setWindows(clone(wins)); }) : function() {};
        var off2 = window.JubairOS && window.JubairOS.on ? window.JubairOS.on('notifications', function(n) { setNotifications(clone(n)); }) : function() {};
        var off3 = window.JubairOS && window.JubairOS.on ? window.JubairOS.on('open-app', function(d) { setActiveApp(d && d.appId); }) : function() {};
        var off4 = window.JubairOS && window.JubairOS.on ? window.JubairOS.on('close-app', function(d) { if (d && d.appId) setActiveApp(null); }) : function() {};
        return function() { off1(); off2(); off3(); off4(); };
      } catch(e) {}
    }, []);

    /* Load apps list */
    useEffect(function() {
      try {
        var list = window.JubairOS && window.JubairOS.listApps ? window.JubairOS.listApps() : [];
        setApps(clone(list));
      } catch(e) {}
    }, []);

    /* Keyboard shortcuts */
    useEffect(function() {
      function onKey(e) {
        if ((e.metaKey || e.ctrlKey) && e.key === ' ') {
          e.preventDefault();
          setSpotlightOpen(function(o) { return !o; });
        }
        if (e.key === 'Escape') {
          setSpotlightOpen(false);
          setLaunchpadOpen(false);
          setCCOpen(false);
          setNCOpen(false);
        }
      }
      window.addEventListener('keydown', onKey);
      return function() { window.removeEventListener('keydown', onKey); };
    }, []);

    /* Close panels on outside click */
    useEffect(function() {
      function h() {
        setSpotlightOpen(false);
        setLaunchpadOpen(false);
        setCCOpen(false);
        setNCOpen(false);
      }
      window.addEventListener('click', h);
      return function() { window.removeEventListener('click', h); };
    }, []);

    /* Set active app based on focused window */
    useEffect(function() {
      if (!windows.length) { setActiveApp(null); return; }
      var top = null;
      for (var i = 0; i < windows.length; i++) {
        if (!windows[i].minimized && (!top || windows[i].z > top.z)) top = windows[i];
      }
      if (top) setActiveApp(top.appId);
    }, [windows]);

    /* Shell API wrappers */
    function openApp(id) {
      try { if (window.JubairOS && window.JubairOS.openApp) window.JubairOS.openApp(id); } catch(e) {}
    }
    function closeApp(winId) {
      try { if (window.JubairOS && window.JubairOS.closeApp) window.JubairOS.closeApp(winId); } catch(e) {}
    }
    function focusApp(winId) {
      try { if (window.JubairOS && window.JubairOS.focusApp) window.JubairOS.focusApp(winId); } catch(e) {}
    }
    function minimizeApp(winId) {
      try { if (window.JubairOS && window.JubairOS.minimizeApp) window.JubairOS.minimizeApp(winId); } catch(e) {}
    }
    function toggleMaximize(winId) {
      try { if (window.JubairOS && window.JubairOS.toggleMaximize) window.JubairOS.toggleMaximize(winId); } catch(e) {}
    }

    var focusedId = null;
    if (windows.length) {
      var maxZ = 0;
      for (var i = 0; i < windows.length; i++) {
        if (!windows[i].minimized && windows[i].z > maxZ) { maxZ = windows[i].z; focusedId = windows[i].winId; }
      }
    }

    if (!booted) {
      return _React.createElement(BootScreen, { onDone: function() { setBooted(true); } });
    }

    return _React.createElement('div', { className: 'jbos-desktop' },
      /* Menubar */
      _React.createElement(MenuBar, {
        onSpotlight: function() { setSpotlightOpen(function(o) { return !o; }); },
        onCC: function() { setCCOpen(function(o) { return !o; }); setNCOpen(false); },
        onNC: function() { setNCOpen(function(o) { return !o; }); setCCOpen(false); },
        activeApp: activeApp,
        onOpenApp: openApp
      }),
      /* Windows layer */
      _React.createElement('div', { className: 'jbos-window-layer' },
        windows.filter(function(w) { return !w.minimized; }).map(function(win) {
          return _React.createElement(WindowFrame, {
            key: win.winId,
            win: win,
            onFocus: focusApp,
            onClose: closeApp,
            onMinimize: minimizeApp,
            onMaximize: toggleMaximize,
            isFocused: focusedId === win.winId
          });
        })
      ),
      /* Dock */
      _React.createElement(Dock, {
        apps: apps,
        onOpenApp: openApp,
        openWindows: windows,
        onOpenLaunchpad: function() { setLaunchpadOpen(true); }
      }),
      /* Spotlight */
      spotlightOpen ? _React.createElement(SpotlightOverlay, {
        onClose: function() { setSpotlightOpen(false); },
        onOpenApp: openApp
      }) : null,
      /* Launchpad */
      launchpadOpen ? _React.createElement(LaunchpadOverlay, {
        onClose: function() { setLaunchpadOpen(false); },
        onOpenApp: openApp,
        apps: apps
      }) : null,
      /* Control Center */
      ccOpen ? _React.createElement(ControlCenter, { onClose: function() { setCCOpen(false); } }) : null,
      /* Notification Center */
      ncOpen ? _React.createElement(NotificationCenter, {
        onClose: function() { setNCOpen(false); },
        notifications: notifications
      }) : null
    );
  }

  /* -----------------------------------------------------------------------
   * Mount
   * ---------------------------------------------------------------------- */
  function mount() {
    try {
      window.JubairOS.init && window.JubairOS.init();
    } catch(e) {}

    try {
      var root = window.ReactDOM && window.ReactDOM.createRoot;
      if (root) {
        var r = root(document.getElementById('root'));
        r.render(_React.createElement(JubairOSDesktop));
      } else {
        /* Fallback for older React without createRoot */
        window.ReactDOM && window.ReactDOM.render && window.ReactDOM.render(
          _React.createElement(JubairOSDesktop),
          document.getElementById('root')
        );
      }
    } catch(e) {
      console.error('[JubairOS] Mount error:', e);
    }
  }

  /* Run after a tiny defer so DOM + all scripts are ready */
  if (document.readyState === 'complete') {
    setTimeout(mount, 0);
  } else {
    window.addEventListener('load', function() { setTimeout(mount, 0); });
  }

})();
