import { DepositEvent, ReconciliationCursor } from "../types";

export interface QueuedDepositEvent extends DepositEvent {
  attempts: number;
  queued_at: string;
  updated_at: string;
  next_attempt_at: string;
  last_error?: string;
}

export interface IDepositQueueStore {
  enqueue(events: DepositEvent[]): Promise<{ accepted: number; duplicates: number }>;
  hasSeen(idempotencyKey: string): Promise<boolean>;
  getProcessable(maxBatch?: number, now?: Date): Promise<QueuedDepositEvent[]>;
  markDelivered(event: QueuedDepositEvent): Promise<void>;
  markFailed(event: QueuedDepositEvent, errorMessage: string, now?: Date): Promise<void>;
  stats(): Promise<{ queued: number; delivered: number }>;
}

export interface IReconciliationCursorStore {
  getCursor(chainType: string): Promise<ReconciliationCursor | null>;
  upsertCursor(chainType: string, fromBlock: string): Promise<void>;
}
