import { StateDBTable } from "@ocap/statedb";
import Lokijs from "lokijs";
import { IBalanceTable, IOperationContext } from "@ocap/types";

//#region src/table/base.d.ts
interface FsTableOptions {
  name: string;
  dataDir: string;
  uniqIndex: string | string[];
  balanceTable?: IBalanceTable;
  syncBalance?: boolean;
}
/**
 * 文件系统表基类
 * 使用 LokiJS + FSAdapter 作为底层存储
 */
declare class FsTable<T = unknown> extends StateDBTable<T> {
  name: string;
  dataDir: string;
  collection: Lokijs.Collection | null;
  balanceTable?: IBalanceTable;
  syncBalance: boolean;
  constructor({
    name,
    dataDir,
    uniqIndex,
    balanceTable,
    syncBalance
  }: FsTableOptions);
  _create(key: string | Record<string, unknown>, attrs?: Partial<T>, _context?: IOperationContext): Promise<T>;
  _get(key: string | Record<string, unknown>, _context?: IOperationContext): Promise<T | null>;
  _history(_key?: string | Record<string, unknown>, _context?: IOperationContext): T[];
  _update(key: string | Record<string, unknown>, updates: Partial<T>, _context?: IOperationContext): Promise<T>;
  updateOrCreate(exist: unknown, state: Partial<T>, ctx?: IOperationContext): Promise<T>;
  _reset(_context?: IOperationContext): void;
}
//#endregion
export { FsTable as default };