declare namespace App {
  namespace ObjectContext {
    type DomainKey = 'project' | 'product' | string;

    type ObjectType = 'project' | 'product' | string;

    type Menu = {
      /** 对象上下文菜单 key，优先约定为目标路由 name */
      key: string;
      /** 菜单文案 */
      label: string;
      /** 路由 name，可为空 */
      routeKey?: string | null;
      /** 路由 path，可为空 */
      routePath?: string | null;
      /** 子菜单 */
      children?: Menu[];
    };

    interface DomainConfig {
      domainKey: DomainKey;
      mode: 'object-context';
      objectType: ObjectType;
      /** 用于识别当前路由是否属于该业务域 */
      routePathPrefixes: string[];
      /** 业务域入口页 */
      entryRouteKey: string;
      entryRoutePath: string;
      /** 对象默认首页兜底值 */
      fallbackDefaultRouteKey: string;
      fallbackDefaultRoutePath: string;
      /** 上下文接口 */
      contextApiPath: string;
      contextApiObjectIdParamKey: string;
      contextApiObjectIdPlacement?: 'query' | 'path';
      /** 第一版固定为 objectId */
      objectIdQueryKey: 'objectId';
    }

    interface Summary {
      [key: string]: unknown;
    }

    interface State {
      domainKey: DomainKey;
      objectType: ObjectType;
      objectId: string;
      objectName: string;
      objectSummary: Summary | null;
      contextScopedMenus: Menu[];
      buttonCodes: string[];
      defaultRouteKey: string;
      defaultRoutePath: string;
      isReady: boolean;
    }
  }
}
