import { Querier, Transaction } from '@platform-modules/db';
import * as drizzle_orm_pg_core from 'drizzle-orm/pg-core';

declare class OversoldError extends Error {
    readonly skuId: string;
    readonly requested: number;
    readonly name = "OversoldError";
    readonly code: "OVERSOLD";
    constructor(skuId: string, requested: number);
}
declare class InventoryValidationError extends Error {
    readonly field: string;
    readonly name = "InventoryValidationError";
    readonly code: "INVENTORY_VALIDATION";
    constructor(field: string);
}
declare class InventoryItemNotFoundError extends Error {
    readonly skuId: string;
    readonly name = "InventoryItemNotFoundError";
    readonly code: "INVENTORY_ITEM_NOT_FOUND";
    constructor(skuId: string);
}
declare function isOversoldError(e: unknown): e is OversoldError;
declare function isInventoryValidationError(e: unknown): e is InventoryValidationError;
declare function isInventoryItemNotFoundError(e: unknown): e is InventoryItemNotFoundError;

declare const inventoryItem: drizzle_orm_pg_core.PgTableWithColumns<{
    name: "inventory_item";
    schema: undefined;
    columns: {
        skuId: drizzle_orm_pg_core.PgColumn<{
            name: "sku_id";
            tableName: "inventory_item";
            dataType: "string";
            columnType: "PgUUID";
            data: string;
            driverParam: string;
            notNull: true;
            hasDefault: false;
            isPrimaryKey: true;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: undefined;
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
        vendorId: drizzle_orm_pg_core.PgColumn<{
            name: "vendor_id";
            tableName: "inventory_item";
            dataType: "string";
            columnType: "PgText";
            data: string;
            driverParam: string;
            notNull: false;
            hasDefault: false;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: [string, ...string[]];
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
        quantityTotal: drizzle_orm_pg_core.PgColumn<{
            name: "quantity_total";
            tableName: "inventory_item";
            dataType: "number";
            columnType: "PgInteger";
            data: number;
            driverParam: string | number;
            notNull: false;
            hasDefault: false;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: undefined;
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
        quantitySold: drizzle_orm_pg_core.PgColumn<{
            name: "quantity_sold";
            tableName: "inventory_item";
            dataType: "number";
            columnType: "PgInteger";
            data: number;
            driverParam: string | number;
            notNull: true;
            hasDefault: true;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: undefined;
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
        createdAt: drizzle_orm_pg_core.PgColumn<{
            name: "created_at";
            tableName: "inventory_item";
            dataType: "date";
            columnType: "PgTimestamp";
            data: Date;
            driverParam: string;
            notNull: true;
            hasDefault: true;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: undefined;
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
        updatedAt: drizzle_orm_pg_core.PgColumn<{
            name: "updated_at";
            tableName: "inventory_item";
            dataType: "date";
            columnType: "PgTimestamp";
            data: Date;
            driverParam: string;
            notNull: true;
            hasDefault: true;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: undefined;
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
    };
    dialect: "pg";
}>;
declare const stockReservation: drizzle_orm_pg_core.PgTableWithColumns<{
    name: "stock_reservation";
    schema: undefined;
    columns: {
        id: drizzle_orm_pg_core.PgColumn<{
            name: "id";
            tableName: "stock_reservation";
            dataType: "string";
            columnType: "PgUUID";
            data: string;
            driverParam: string;
            notNull: true;
            hasDefault: true;
            isPrimaryKey: true;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: undefined;
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
        skuId: drizzle_orm_pg_core.PgColumn<{
            name: "sku_id";
            tableName: "stock_reservation";
            dataType: "string";
            columnType: "PgUUID";
            data: string;
            driverParam: string;
            notNull: true;
            hasDefault: false;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: undefined;
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
        qty: drizzle_orm_pg_core.PgColumn<{
            name: "qty";
            tableName: "stock_reservation";
            dataType: "number";
            columnType: "PgInteger";
            data: number;
            driverParam: string | number;
            notNull: true;
            hasDefault: false;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: undefined;
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
        holderRef: drizzle_orm_pg_core.PgColumn<{
            name: "holder_ref";
            tableName: "stock_reservation";
            dataType: "string";
            columnType: "PgText";
            data: string;
            driverParam: string;
            notNull: true;
            hasDefault: false;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: [string, ...string[]];
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
        expiresAt: drizzle_orm_pg_core.PgColumn<{
            name: "expires_at";
            tableName: "stock_reservation";
            dataType: "date";
            columnType: "PgTimestamp";
            data: Date;
            driverParam: string;
            notNull: true;
            hasDefault: false;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: undefined;
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
        consumedAt: drizzle_orm_pg_core.PgColumn<{
            name: "consumed_at";
            tableName: "stock_reservation";
            dataType: "date";
            columnType: "PgTimestamp";
            data: Date;
            driverParam: string;
            notNull: false;
            hasDefault: false;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: undefined;
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
        releasedAt: drizzle_orm_pg_core.PgColumn<{
            name: "released_at";
            tableName: "stock_reservation";
            dataType: "date";
            columnType: "PgTimestamp";
            data: Date;
            driverParam: string;
            notNull: false;
            hasDefault: false;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: undefined;
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
        createdAt: drizzle_orm_pg_core.PgColumn<{
            name: "created_at";
            tableName: "stock_reservation";
            dataType: "date";
            columnType: "PgTimestamp";
            data: Date;
            driverParam: string;
            notNull: true;
            hasDefault: true;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: undefined;
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
    };
    dialect: "pg";
}>;
declare const inventorySchema: {
    inventoryItem: drizzle_orm_pg_core.PgTableWithColumns<{
        name: "inventory_item";
        schema: undefined;
        columns: {
            skuId: drizzle_orm_pg_core.PgColumn<{
                name: "sku_id";
                tableName: "inventory_item";
                dataType: "string";
                columnType: "PgUUID";
                data: string;
                driverParam: string;
                notNull: true;
                hasDefault: false;
                isPrimaryKey: true;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: undefined;
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
            vendorId: drizzle_orm_pg_core.PgColumn<{
                name: "vendor_id";
                tableName: "inventory_item";
                dataType: "string";
                columnType: "PgText";
                data: string;
                driverParam: string;
                notNull: false;
                hasDefault: false;
                isPrimaryKey: false;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: [string, ...string[]];
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
            quantityTotal: drizzle_orm_pg_core.PgColumn<{
                name: "quantity_total";
                tableName: "inventory_item";
                dataType: "number";
                columnType: "PgInteger";
                data: number;
                driverParam: string | number;
                notNull: false;
                hasDefault: false;
                isPrimaryKey: false;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: undefined;
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
            quantitySold: drizzle_orm_pg_core.PgColumn<{
                name: "quantity_sold";
                tableName: "inventory_item";
                dataType: "number";
                columnType: "PgInteger";
                data: number;
                driverParam: string | number;
                notNull: true;
                hasDefault: true;
                isPrimaryKey: false;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: undefined;
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
            createdAt: drizzle_orm_pg_core.PgColumn<{
                name: "created_at";
                tableName: "inventory_item";
                dataType: "date";
                columnType: "PgTimestamp";
                data: Date;
                driverParam: string;
                notNull: true;
                hasDefault: true;
                isPrimaryKey: false;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: undefined;
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
            updatedAt: drizzle_orm_pg_core.PgColumn<{
                name: "updated_at";
                tableName: "inventory_item";
                dataType: "date";
                columnType: "PgTimestamp";
                data: Date;
                driverParam: string;
                notNull: true;
                hasDefault: true;
                isPrimaryKey: false;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: undefined;
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
        };
        dialect: "pg";
    }>;
    stockReservation: drizzle_orm_pg_core.PgTableWithColumns<{
        name: "stock_reservation";
        schema: undefined;
        columns: {
            id: drizzle_orm_pg_core.PgColumn<{
                name: "id";
                tableName: "stock_reservation";
                dataType: "string";
                columnType: "PgUUID";
                data: string;
                driverParam: string;
                notNull: true;
                hasDefault: true;
                isPrimaryKey: true;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: undefined;
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
            skuId: drizzle_orm_pg_core.PgColumn<{
                name: "sku_id";
                tableName: "stock_reservation";
                dataType: "string";
                columnType: "PgUUID";
                data: string;
                driverParam: string;
                notNull: true;
                hasDefault: false;
                isPrimaryKey: false;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: undefined;
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
            qty: drizzle_orm_pg_core.PgColumn<{
                name: "qty";
                tableName: "stock_reservation";
                dataType: "number";
                columnType: "PgInteger";
                data: number;
                driverParam: string | number;
                notNull: true;
                hasDefault: false;
                isPrimaryKey: false;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: undefined;
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
            holderRef: drizzle_orm_pg_core.PgColumn<{
                name: "holder_ref";
                tableName: "stock_reservation";
                dataType: "string";
                columnType: "PgText";
                data: string;
                driverParam: string;
                notNull: true;
                hasDefault: false;
                isPrimaryKey: false;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: [string, ...string[]];
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
            expiresAt: drizzle_orm_pg_core.PgColumn<{
                name: "expires_at";
                tableName: "stock_reservation";
                dataType: "date";
                columnType: "PgTimestamp";
                data: Date;
                driverParam: string;
                notNull: true;
                hasDefault: false;
                isPrimaryKey: false;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: undefined;
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
            consumedAt: drizzle_orm_pg_core.PgColumn<{
                name: "consumed_at";
                tableName: "stock_reservation";
                dataType: "date";
                columnType: "PgTimestamp";
                data: Date;
                driverParam: string;
                notNull: false;
                hasDefault: false;
                isPrimaryKey: false;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: undefined;
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
            releasedAt: drizzle_orm_pg_core.PgColumn<{
                name: "released_at";
                tableName: "stock_reservation";
                dataType: "date";
                columnType: "PgTimestamp";
                data: Date;
                driverParam: string;
                notNull: false;
                hasDefault: false;
                isPrimaryKey: false;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: undefined;
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
            createdAt: drizzle_orm_pg_core.PgColumn<{
                name: "created_at";
                tableName: "stock_reservation";
                dataType: "date";
                columnType: "PgTimestamp";
                data: Date;
                driverParam: string;
                notNull: true;
                hasDefault: true;
                isPrimaryKey: false;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: undefined;
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
        };
        dialect: "pg";
    }>;
};
type InventorySchema = typeof inventorySchema;

declare class InventoryMigrateError extends Error {
    readonly detail: string;
    readonly name = "InventoryMigrateError";
    readonly code: "INVENTORY_MIGRATE";
    constructor(detail: string);
}
declare function isInventoryMigrateError(e: unknown): e is InventoryMigrateError;
declare function pushSchema(db: Querier<InventorySchema>): Promise<void>;

declare function setInventory(tx: Transaction<InventorySchema>, item: {
    skuId: string;
    vendorId?: string | null;
    quantityTotal: number | null;
}): Promise<void>;

interface InventoryItem {
    skuId: string;
    vendorId: string | null;
    quantityTotal: number | null;
    quantitySold: number;
}
interface ReserveArgs {
    skuId: string;
    qty: number;
    holderRef: string;
    now: Date;
    ttlMs?: number;
}

declare function reserve(tx: Transaction<InventorySchema>, args: ReserveArgs): Promise<{
    reservationId: string;
}>;

declare function consume(tx: Transaction<InventorySchema>, reservationId: string): Promise<boolean>;

declare function release(tx: Transaction<InventorySchema>, reservationId: string): Promise<void>;

declare function commitStock(tx: Transaction<InventorySchema>, skuId: string, qty: number): Promise<void>;

declare function getAvailability(q: Querier<InventorySchema>, skuId: string): Promise<number | null>;

declare function sweepStaleReservations(q: Querier<InventorySchema>, now: Date): Promise<{
    released: number;
}>;

export { type InventoryItem, InventoryItemNotFoundError, InventoryMigrateError, type InventorySchema, InventoryValidationError, OversoldError, type ReserveArgs, commitStock, consume, getAvailability, inventoryItem, inventorySchema, isInventoryItemNotFoundError, isInventoryMigrateError, isInventoryValidationError, isOversoldError, pushSchema, release, reserve, setInventory, stockReservation, sweepStaleReservations };
