import { type Db } from '@znet/catalog-db';
import type { Logger } from '@znet/shared';
import type { MagentoApi } from '@znet/magento';
export interface SyncContext {
    db: Db;
    magento: MagentoApi;
    log: Logger;
    /** Store view codes to sync; empty = all active. */
    storeCodes: string[];
    stockId: number;
}
export declare function syncReference(ctx: SyncContext): Promise<{
    stores: number;
    attributes: number;
    attributeSets: number;
    categories: number;
    removedCategories: number;
}>;
/** Pull products changed since each scope's cursor. Default scope first so store rows have parents. */
export declare function syncProductsIncremental(ctx: SyncContext): Promise<Record<string, number>>;
/** Full sweep of every scope + delete reconciliation. Run nightly and for the initial load. */
export declare function syncProductsFull(ctx: SyncContext): Promise<Record<string, number>>;
/** Refresh one SKU across all scopes, plus its live salable quantity. */
export declare function syncProductSku(ctx: SyncContext, sku: string): Promise<{
    found: number;
    storeRows: number;
    softDeleted: number;
}>;
/**
 * Full stock sweep. Magento has no updated_at on stock, so this is always a complete pass.
 * Uses MSI source items; falls back to legacy stock_item on product payloads when MSI is absent.
 */
export declare function syncInventory(ctx: SyncContext): Promise<{
    sourceItems: number;
    removed: number;
    msi: number;
}>;
export declare const JOBS: {
    readonly 'sync-reference': typeof syncReference;
    readonly 'sync-products-incremental': typeof syncProductsIncremental;
    readonly 'sync-products-full': typeof syncProductsFull;
    readonly 'sync-inventory': typeof syncInventory;
};
export type JobName = keyof typeof JOBS;
//# sourceMappingURL=jobs.d.ts.map