/** Єдина точка входу для всіх модулів. У проєкті має бути лише один onOpen(). */
function onOpen(e) {
  const errors = [];
  runAppModuleSafely_('Web Archive', function () { addWaybackAuditMenu_(); }, errors);
  runAppModuleSafely_('Drop Archive Analyzer', function () { if(typeof addArchiveAnalyzerMenu_==='function') addArchiveAnalyzerMenu_(); }, errors);
  runAppModuleSafely_('Entity Audit', function () { if(typeof addEntityAuditMenu_==='function') addEntityAuditMenu_(); }, errors);
  runAppModuleSafely_('Підготовка Drop Archive дашборда', function () { if(typeof setupDashboard_==='function') setupDashboard_(false); }, errors);
  runAppModuleSafely_('Підготовка Entity Audit звіту', function () { if(typeof entitySetupReport_==='function') entitySetupReport_(false); }, errors);
  if (errors.length) console.error('Помилки ініціалізації модулів: ' + errors.join(' | '));
}

function onInstall(e) { onOpen(e); }

function runAppModuleSafely_(moduleName, callback, errors) {
  try { callback(); }
  catch (error) {
    const message = moduleName + ': ' + String(error && (error.message || error) || 'невідома помилка');
    errors.push(message); console.error(message);
  }
}