/**
 * Inventory API client for Amazon Selling Partner API
 */
import { BaseApiClient } from './base-client.js';
import { AuthConfig } from '../types/auth.js';
/**
 * Parameters for retrieving inventory
 */
export interface GetInventoryParams {
    /**
     * List of seller SKUs to filter by (optional)
     */
    sellerSkus?: string[];
    /**
     * Marketplace ID (defaults to the one in config)
     */
    marketplaceId?: string;
    /**
     * List of ASINs to filter by (optional)
     */
    asins?: string[];
    /**
     * List of fulfillment channels to filter by (optional)
     */
    fulfillmentChannels?: Array<'AMAZON' | 'SELLER'>;
    /**
     * Date-time filter for items updated after this time
     */
    startDateTime?: Date;
    /**
     * Date-time filter for items updated before this time
     */
    endDateTime?: Date;
    /**
     * Page size (1-100)
     */
    pageSize?: number;
    /**
     * Page token for pagination
     */
    nextToken?: string;
}
/**
 * Parameters for updating inventory
 */
export interface UpdateInventoryParams {
    /**
     * Seller SKU
     */
    sku: string;
    /**
     * Inventory quantity
     */
    quantity: number;
    /**
     * Fulfillment channel ('AMAZON' or 'SELLER')
     */
    fulfillmentChannel: 'AMAZON' | 'SELLER';
    /**
     * Restock date (optional, for future inventory)
     */
    restockDate?: Date;
}
/**
 * Parameters for setting inventory replenishment settings
 */
export interface SetInventoryReplenishmentParams {
    /**
     * Seller SKU
     */
    sku: string;
    /**
     * Restock level (minimum quantity before reordering)
     */
    restockLevel: number;
    /**
     * Target level (desired quantity after reordering)
     */
    targetLevel: number;
    /**
     * Maximum inventory level
     */
    maximumLevel?: number;
    /**
     * Lead time in days
     */
    leadTimeDays?: number;
}
/**
 * Inventory item
 */
export interface InventoryItem {
    /**
     * Seller SKU
     */
    sku: string;
    /**
     * ASIN
     */
    asin?: string;
    /**
     * Condition of the item
     */
    condition?: string;
    /**
     * Inventory details by fulfillment channel
     */
    inventoryDetails: Array<{
        /**
         * Fulfillment channel code ('AMAZON' or 'SELLER')
         */
        fulfillmentChannelCode: 'AMAZON' | 'SELLER';
        /**
         * Available quantity
         */
        quantity: number;
        /**
         * Reserved quantity (e.g., for pending orders)
         */
        reservedQuantity?: number;
        /**
         * Restock date (for future inventory)
         */
        restockDate?: string;
        /**
         * Replenishment settings
         */
        replenishmentSettings?: {
            /**
             * Restock level (minimum quantity before reordering)
             */
            restockLevel?: number;
            /**
             * Target level (desired quantity after reordering)
             */
            targetLevel?: number;
            /**
             * Maximum inventory level
             */
            maximumLevel?: number;
            /**
             * Lead time in days
             */
            leadTimeDays?: number;
        };
    }>;
    /**
     * Last updated timestamp
     */
    lastUpdatedTime: string;
}
/**
 * Inventory details
 */
export interface InventoryDetails {
    /**
     * Inventory items
     */
    items: InventoryItem[];
    /**
     * Next token for pagination
     */
    nextToken?: string;
}
/**
 * Inventory update result
 */
export interface InventoryUpdateResult {
    /**
     * Seller SKU
     */
    sku: string;
    /**
     * Fulfillment channel
     */
    fulfillmentChannel: 'AMAZON' | 'SELLER';
    /**
     * Update status
     */
    status: 'SUCCESSFUL' | 'FAILED';
    /**
     * Error message (if status is FAILED)
     */
    errorMessage?: string;
    /**
     * Error code (if status is FAILED)
     */
    errorCode?: string;
}
/**
 * Inventory replenishment update result
 */
export interface InventoryReplenishmentUpdateResult {
    /**
     * Seller SKU
     */
    sku: string;
    /**
     * Update status
     */
    status: 'SUCCESSFUL' | 'FAILED';
    /**
     * Error message (if status is FAILED)
     */
    errorMessage?: string;
    /**
     * Error code (if status is FAILED)
     */
    errorCode?: string;
}
/**
 * Inventory API client for Amazon Selling Partner API
 */
export declare class InventoryClient extends BaseApiClient {
    /**
     * API version
     */
    private readonly apiVersion;
    /**
     * Original authentication configuration
     */
    private readonly authConfig;
    /**
     * Create a new InventoryClient instance
     *
     * @param authConfig Authentication configuration
     */
    constructor(authConfig: AuthConfig);
    /**
     * Gets the client configuration
     *
     * @returns Authentication configuration
     */
    getConfig(): AuthConfig;
    /**
     * Get inventory
     *
     * @param params Parameters for retrieving inventory
     * @returns Promise resolving to the inventory details
     */
    getInventory(params?: GetInventoryParams): Promise<InventoryDetails>;
    /**
     * Get inventory for a specific SKU
     *
     * @param sku Seller SKU
     * @returns Promise resolving to the inventory item
     */
    getInventoryBySku(sku: string): Promise<InventoryItem>;
    /**
     * Update inventory quantity
     *
     * @param params Parameters for updating inventory
     * @param emitNotification Whether to emit a notification event (default: true)
     *                        Note: This parameter is used by the notification system when it overrides this method
     * @returns Promise resolving to the update result
     */
    updateInventory(params: UpdateInventoryParams, _emitNotification?: boolean): Promise<InventoryUpdateResult>;
    /**
     * Set inventory replenishment settings
     *
     * @param params Parameters for setting inventory replenishment settings
     * @returns Promise resolving to the update result
     */
    setInventoryReplenishment(params: SetInventoryReplenishmentParams): Promise<InventoryReplenishmentUpdateResult>;
    /**
     * Validate inventory update data
     *
     * @param params Inventory update parameters to validate
     * @throws Error if validation fails
     */
    private validateInventoryUpdateData;
    /**
     * Validate replenishment data
     *
     * @param params Replenishment parameters to validate
     * @throws Error if validation fails
     */
    private validateReplenishmentData;
}
