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

//#region src/table/base.d.ts
interface TableOptions {
  name: string;
  uniqIndex: string | string[];
  syncBalance?: boolean;
  balanceTable?: IBalanceTable;
  db: Lokijs;
}
/**
 * 内存表基类
 * 使用 LokiJS Collection 作为底层存储
 */
declare class MemoryTable<T = unknown> extends StateDBTable<T> {
  name: string;
  balanceTable?: IBalanceTable;
  syncBalance: boolean;
  collection: Collection<LokiObj & Record<string, unknown>>;
  constructor({
    name,
    uniqIndex,
    balanceTable,
    syncBalance,
    db
  }: TableOptions);
  _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, _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 { MemoryTable as default };