/**
 * 路径与嵌入状态相关的工具函数：
 * - 判断是否处于 iframe 场景（需进行跨窗口通信）
 * - 提供宿主/子端路径的前缀转换
 */
import { log } from './logger.js';

/**
 * 安全获取当前窗口的 pathname，避免跨域等异常导致报错。
 */
function safePathname(): string {
  try {
    const p = window.location?.pathname || '';
    log('safePathname()', p);
    return p;
  } catch {
    log('safePathname() error, return empty pathname');
    return '';
  }
}

/**
 * 判断是否运行在 iframe 中。
 * 如因跨域访问 window.top 抛错，则视为在 iframe 中（embedded）。
 */
function isInIframe(): boolean {
  try {
    const inIframe = window.self !== window.top;
    log('isInIframe()', inIframe);
    return inIframe;
  } catch {
    // Cross-origin access throws, treat as embedded
    log('isInIframe() cross-origin error, treat as embedded');
    return true;
  }
}

/**
 * 是否处于“嵌入模式”：
 * - 存在 '/route-ragflow' 路径标识 或
 * - 运行在 iframe 中
 */
export function isEmbedded(): boolean {
  const path = safePathname();
  const inIframe = isInIframe();
  const embedded = path.includes('/route-ragflow') || inIframe;
  log('isEmbedded()', { path, inIframe, embedded });
  return embedded;
}

/**
 * 将子端路由转换为宿主路由（添加宿主前缀）。
 * 默认会为路径添加 '/route-ragflow' 前缀。
 */
export function toHostPath(to: string): string {
  const normalized = to.startsWith('/') ? to : `/${to}`;
  const target = normalized.startsWith('/route-ragflow') ? normalized : `/route-ragflow${normalized}`;
  log('toHostPath()', { input: to, normalized, target });
  return target;
}

/**
 * 将宿主路由转换回子端路由（去除 '/route-ragflow' 前缀）。
 */
export function toChildPath(to: string): string {
  const target = to.replace(/^\/route-ragflow/, '') || '/';
  log('toChildPath()', { input: to, target });
  return target;
}