export interface TradeField { buy?: Record; sell?: Record; shops?: string[]; } export interface TradeRejection { reason: string; } export interface TradeWallet { canAfford(costs: Record): string | null; charge(costs: Record): void; grant(gains: Record): void; } export interface TradeInventory { put(inventoryId: string, itemId: string, count: number): TradeRejection | null; take(inventoryId: string, itemId: string, count: number): TradeRejection | null; count(inventoryId: string, itemId: string): number; } export interface TradeSystemDeps { resolveTrade(itemId: string): TradeField | null | undefined; wallet: TradeWallet; inventory: TradeInventory; } export interface TradeParty { shop: string; inventoryId: string; } export interface TradeSystem { canBuy(itemId: string, shopId: string, count?: number): string | null; canSell(itemId: string, count?: number): string | null; buy(itemId: string, count: number | undefined, party: TradeParty): TradeRejection | null; sell(itemId: string, count: number | undefined, party: TradeParty): TradeRejection | null; tradableAt(shopId: string, allItemIds: string[]): string[]; } /** @internal */ export declare function canAffordCosts(balances: Record, costs: Record): string | null; export interface TradeOutcome { itemId: string; count: number; currency: Record; } export type TradeResolution = { status: "ok"; outcome: TradeOutcome; } | { status: "rejected"; reason: string; }; /** @internal */ export declare function resolveBuy(itemId: string, trade: TradeField | null | undefined, shopId: string, count: number, balances: Record): TradeResolution; /** @internal */ export declare function resolveSell(itemId: string, trade: TradeField | null | undefined, count: number): TradeResolution; /** @internal */ export declare function applyTradeOutcome(outcome: TradeOutcome, appliers: { adjustItem(itemId: string, count: number): { reason: string; } | null; adjustCurrency(delta: Record): void; }): { reason: string; } | null; /** * Buy and sell goods against player currency balances, resolving affordability and price. * * @capability shop-trade buy and sell goods against player currency balances * @internal */ export declare function createTradeSystem(deps: TradeSystemDeps): TradeSystem;