/**
 * PersonalPageStore.data.ts — 数据层（工具方法 + CRUD 核心）
 *
 * 包含：
 * - getValueByPath / setValueByPath / deleteValueByPath（dot notation 路径操作）
 * - isValidValue / isValueEqual（值校验/比较）
 * - deepClone / mergeData（数据复制/合并）
 * - getLocalPagePath / getRemotePagePath / isUseLocal
 * - getMetadata / setMetadata / _getTimestamp / generateVersion
 * - savePageDataTimeSeries（时序数据追加）
 * - loadPageDataAsNumber
 * - savePageData / deletePageData（核心 CRUD）
 * - checkMergeRemoteData（版本合并，含冲突解决）
 * - isRemotePageVersionChecked / setRemotePageVersionChecked
 * - _markPageMutation / _getPageMutationVersion
 * - loadPageDataFromRemote / loadPageData（读取入口）
 */
import type { PageMetadata, TimeSeriesKeyValue } from './PersonalPageStore.types';
import { PersonalPageStoreBase } from './PersonalPageStore.base';
export declare class PersonalPageStoreData extends PersonalPageStoreBase {
    /**
     * 通过 dot notation 路径读取对象中的值。
     * 路径不存在时返回 null。
     *
     * @param obj  - 源对象
     * @param path - 如 `"user.profile.name"`；空路径返回整个对象
     */
    getValueByPath(obj: Record<string, unknown> | null | undefined, path: string): unknown;
    /**
     * 通过 dot notation 路径在对象中写入值。
     * 路径中间节点不存在时自动创建空对象。
     *
     * @param obj   - 目标对象
     * @param path  - dot notation 路径；空路径时将 value 对象合并到 obj
     * @param value - 要写入的值
     * @returns 是否写入成功
     */
    setValueByPath(obj: Record<string, unknown>, path: string, value: unknown): boolean;
    /**
     * 通过 dot notation 路径删除对象中的值。
     * @returns 是否成功删除
     */
    deleteValueByPath(obj: Record<string, unknown>, path: string): boolean;
    /**
     * 检查值是否有效（非 null / 非空字符串 / 非空对象）。
     * @param value - 要检查的值
     */
    isValidValue(value: unknown): boolean;
    /**
     * 深度相等性比较（支持数组和嵌套对象）。
     * @param v1 - 第一个值
     * @param v2 - 第二个值
     */
    isValueEqual(v1: unknown, v2: unknown): boolean;
    /**
     * 深度克隆值（防止外部修改内部数据）。
     * 支持：null / 原始类型 / Date / Array / 普通对象；
     * 正确处理循环引用（WeakMap 追踪）。
     *
     * @param value - 要克隆的值
     * @param seen  - 循环引用追踪（内部参数，请勿手动传入）
     */
    deepClone<T>(value: T, seen?: WeakMap<object, unknown>): T;
    /**
     * 深度合并 source 到 target（数组替换，对象递归合并）。
     * @param target - 目标对象（会被原地修改）
     * @param source - 源对象
     */
    mergeData(target: Record<string, unknown>, source: Record<string, unknown>): Record<string, unknown>;
    /**
     * 计算页面在 IndexedDB / localStorage 中的存储 key。
     * 格式：`personal_page_{username}_{effectiveName}`
     */
    getLocalPagePath(pageName: string): string;
    /**
     * 计算页面在 Keepwork 远端的完整路径。
     * 格式：`username/remoteStorePath/effectiveName`
     * @throws 未登录且无 override 用户名时抛出错误
     */
    getRemotePagePath(pageName: string): string;
    /**
     * 检查是否处于本地模式（无 token 且无 override 用户名，仅使用本地存储）。
     */
    isUseLocal(): boolean;
    /**
     * 读取页面数据对象的版本元数据（向后兼容 `metadata` 和 `_metadata` 字段）。
     */
    getMetadata(data: Record<string, unknown> | null | undefined): PageMetadata;
    /**
     * 写入页面数据对象的版本元数据（使用新字段名 `_metadata`）。
     */
    setMetadata(data: Record<string, unknown>, metadata: PageMetadata): void;
    /**
     * 生成当前时间戳字符串（格式：`YYYY-MM-DD-HH:MM:SS`）。
     * 用于版本元数据的 created_at / updated_at 字段。
     */
    _getTimestamp(): string;
    /**
     * 生成自增版本元数据。
     * 若远端版本比本地新，基于远端版本自增；否则基于本地版本自增。
     *
     * @param localData  - 当前本地数据对象
     * @param remoteData - 最新远端数据对象（可选）
     */
    generateVersion(localData?: Record<string, unknown>, remoteData?: Record<string, unknown>): PageMetadata;
    /**
     * 保存时序数据（数组形式，新数据插入头部，超过 maxKeyCount 时截断）。
     *
     * 支持 unique 类型（相同值时更新而非追加）、addictive（累加）、mean（均值）。
     *
     * @param pageName    - 页面名
     * @param keyValues   - 数据键值数组，每项含 `key / value / type`
     * @param maxKeyCount - 每个 key 最多保留的元素数（默认 10）
     * @param bFlush      - 是否立即写盘
     * @param bUseCache   - 是否使用缓存
     */
    savePageDataTimeSeries(pageName: string, keyValues: TimeSeriesKeyValue[], maxKeyCount?: number, bFlush?: boolean, bUseCache?: boolean): Promise<void>;
    /**
     * 读取数值型页面数据（数组时返回第一个元素）。
     *
     * @param pageName    - 页面名
     * @param key         - 数据键
     * @param forceRemote - 是否强制从远端加载
     */
    loadPageDataAsNumber(pageName: string, key: string, forceRemote?: boolean): Promise<number | null>;
    /**
     * 保存页面数据（核心写入入口）。
     *
     * 写入流程：
     * 1. 检查并加载本地磁盘 + 远端数据（版本合并）
     * 2. 比较新旧值，相同则跳过
     * 3. 将变更写入 `personalPageDataUpdated`
     * 4. 标记 pending 并触发防抖磁盘写入
     *
     * @param pageName  - 页面名
     * @param key       - dot notation 数据键（`_metadata` 保留，不可直接写）
     * @param value     - 要保存的值；null 表示删除该键
     * @param bFlush    - 是否立即写盘并触发同步
     * @param bUseCache - 是否使用远端缓存
     */
    savePageData(pageName: string, key: string, value: unknown, bFlush?: boolean, bUseCache?: boolean): Promise<void>;
    /**
     * 删除页面数据的指定键。
     *
     * @param pageName - 页面名
     * @param key      - dot notation 数据键（不能为 'metadata' / '_metadata'）
     * @param bFlush   - 是否立即触发同步
     * @returns 是否成功删除
     */
    deletePageData(pageName: string, key: string, bFlush?: boolean): Promise<boolean>;
    /**
     * 检查并合并远端数据（版本比较 + 冲突解决）。
     *
     * 合并策略：
     * - 远端版本更新 → 使用远端数据
     * - 本地版本更新 + bUseCache → 可能是缓存陈旧，触发冲突解决逻辑并发出 versionConflict 事件
     * - 版本相同且本地为空 → 使用远端数据
     *
     * @param pageName    - 页面名
     * @param bForceMerge - 强制重新检查（忽略已检查标志）
     * @param bUseCache   - 是否使用远端缓存
     */
    checkMergeRemoteData(pageName: string, bForceMerge?: boolean, bUseCache?: boolean): Promise<void>;
    isRemotePageVersionChecked(pageName: string): boolean;
    setRemotePageVersionChecked(pageName: string, bChecked: boolean): void;
    _markPageMutation(pageName: string): number;
    _getPageMutationVersion(pageName: string): number;
    /**
     * 直接从远端加载页面数据（绕过版本检查）。
     * 结果同步到本地缓存并写盘，下次读取直接命中缓存。
     *
     * @param pageName  - 页面名
     * @param key       - dot notation 数据键
     * @param bUseCache - 是否使用 API 缓存
     */
    loadPageDataFromRemote(pageName: string, key: string, bUseCache?: boolean): Promise<unknown>;
    /**
     * 加载页面数据（含版本合并，主读取入口）。
     *
     * 读取顺序：
     * 1. `forceRemote=true` → 直接调用 loadPageDataFromRemote
     * 2. 检查本地磁盘（checkLoadPageFromDisk）
     * 3. 检查远端版本（checkMergeRemoteData）
     * 4. 读取 personalPageDataUpdated（最高优先级）
     * 5. 读取 personalPageData（原始/合并后数据）
     *
     * @param pageName    - 页面名
     * @param key         - dot notation 数据键（空字符串返回整个页面对象）
     * @param forceRemote - 强制从远端加载（默认 false）
     * @param bUseCache   - 是否使用远端缓存
     */
    loadPageData(pageName: string, key: string, forceRemote?: boolean, bUseCache?: boolean): Promise<unknown>;
    /**
     * 确保页面数据已从磁盘加载并与远端合并（懒加载门卫）。
     */
    checkLoadData(pageName: string, bUseCache?: boolean): Promise<void>;
}
//# sourceMappingURL=PersonalPageStore.data.d.ts.map