/**
 * space-viewer.ts — スペース系ルートの viewer 解決ヘルパー。
 * createSpaceApi（space-api.ts）と space-files-api.ts の両方から使うため、
 * 循環 import を避けて中立モジュールに置く。spaceViewerOf は space-api.ts から
 * 再エクスポートされ、cross-calendar-api の既存 import を維持する。
 */

/**
 * 認証 OFF 環境では synthetic 'local' ユーザーにフォールバックする（no-auth local 規約）。
 * role は 'admin' にする。これは server.ts のグローバル no-auth ユーザー
 * （deserializeUser フォールバックの `{ id: 'local', role: 'admin' }`）と意図的に揃えたもの。
 * memory-api / reflection-api はルータ内で role:'user' を注入するが、それらは owner_id を
 * 主体に持たないので role に依存しない。スペースは owner_id=null の案件を local ユーザーが
 * 編集できる必要があり、canEditEntity は role:'admin' か owner 一致で許可するため、
 * ここを 'user' に「正規化」すると owner_id=null の自作スペースを編集できなくなる。変更しないこと。
 */
export function viewerOf(req: any, authActive: boolean): Express.User {
  if (authActive && req.user) return req.user;
  return req.user ?? ({ id: 'local', role: 'admin', orgIds: [] } as unknown as Express.User);
}
