interface SyncTransport {
readonly mode: 'direct' | 'hub';
connect(): Promise<void>;
disconnect(): void;
// Leases
acquireLease(posReference: string, version: number): Promise<LeaseResult>;
releaseLease(posReference: string, finalSnapshot?: OrderSnapshotData): void;
isLeaseHeld(posReference: string): boolean;
onLeaseRevoked(handler: (posRef: string, reason: string) => void): () => void;
// Orders
sendOrderSnapshot(posReference: string, version: number, snapshot: OrderSnapshotData): void;
onOrderUpdated(handler: (update: OrderUpdate) => void): () => void;
onConflict(handler: (conflict: ConflictInfo) => void): () => void;
onSyncInit(handler: (orders: SyncInitOrder[]) => void): () => void;
// Tables
sendTableUpdate(tableId: number, status: string, posReference?: string): void;
onTableUpdated(handler: (update: TableUpdate) => void): () => void;
// Floor Plan
sendFloorPlanUpdate(floorId: number, tables: FloorPlanTableInfo[], layoutMode?: string): void;
onFloorPlanChanged(handler: (change: FloorPlanChange) => void): () => void;
// Table Locks
acquireTableLock(tableId: number): Promise<TableLockResult>;
releaseTableLock(tableId: number): void;
forceAcquireTableLock(tableId: number): Promise<TableLockResult>;
onTableLockRevoked(handler: (tableId: number, reason: string) => void): () => void;
onTableLockReleased(handler: (tableId: number) => void): () => void;
onTableLocksState(handler: (locks: TableLockInfo[]) => void): () => void;
// Order Finalization
finalizeOrder(posReference: string, snapshot: OrderSnapshotData, configId: number): Promise<FinalizeOrderResult>;
// Ticket Numbers
requestTicketNumber(orderType: "takeout" | "delivery"): Promise<string>;
// Outbox
queueForRetry(action: string, payload: Record<string, unknown>): void;
flushOutbox(): Promise<{ sent: number; failed: number }>;
getOutboxDepth(): number;
// State
onStateChange(handler: (state: TransportState) => void): () => void;
getState(): TransportState;
// Reconnection events
onReconnecting(handler: () => void): () => void;
onReconnected(handler: () => void): () => void;
}