// MNote 资源打开运行时外置模块。
// 当前先承接 SIDEBAR_TREE_JS 中的低风险纯辅助函数。
// 本文件以 type="module" 加载，执行时机可能晚于 inline script。
// SIDEBAR_TREE_JS 会在运行时优先委托到 window.__mnoteResourceOpenRuntime。
// 模块尚未加载或加载失败时，inline script 保留原实现兜底。

function localFilePathFromAssetId(assetId) {
  var value = String(assetId || '').trim();
  return value.indexOf('local-file:') === 0
    ? value.slice('local-file:'.length)
    : value.indexOf('local:asset:') === 0
      ? value.slice('local:asset:'.length)
      : '';
}

function buildLocalFileOpenUrl(relativePath, download) {
  var rootUri = currentRootUri();
  if (!rootUri || !relativePath) return '';
  var url = new URL('/api/local-folder/files/open', window.location.origin);
  url.searchParams.set('rootUri', rootUri);
  url.searchParams.set('path', relativePath);
  if (download) url.searchParams.set('download', 'true');
  return url.toString();
}

function buildOnlyOfficeOpenPath(input) {
  var params = new URLSearchParams();
  params.set('fileUrl', input.fileUrl || '');
  params.set('fileName', input.fileName || '未命名资源');
  params.set('fileType', input.fileType || 'docx');
  if (input.assetId) params.set('assetId', input.assetId);
  if (input.documentId) params.set('documentId', input.documentId);
  if (input.userId) params.set('userId', input.userId);
  params.set('mode', input.mode || 'view');
  if (input.documentId && input.assetId) {
    return '/office/' + encodeURIComponent(input.documentId) + '/' + encodeURIComponent(input.assetId) + '?' + params.toString();
  }
  return '/onlyoffice?' + params.toString();
}

function currentRootUri() {
  var params = new URLSearchParams(window.location.search);
  var fromUrl = (params.get('rootUri') || '').trim();
  if (fromUrl) return fromUrl;
  return document.body instanceof HTMLElement
    ? (document.body.getAttribute('data-mnote-root-uri') || '').trim()
    : '';
}

window.__mnoteResourceOpenRuntime = {
  localFilePathFromAssetId: localFilePathFromAssetId,
  buildLocalFileOpenUrl: buildLocalFileOpenUrl,
  buildOnlyOfficeOpenPath: buildOnlyOfficeOpenPath
};
