import { Prisma } from '@prisma/client';
import type { InventoryCategoryInput, ItemMasterCreateInput, ItemMasterUpdateInput, StockLocationInput, UnitOfMeasureInput } from '@ali-ismail/contracts';
import { PrismaService } from '../prisma/prisma.service';
import { AuditService } from '../audit/audit.service';
import { VariantResolverService } from './variant-resolver.service';
export declare class InventoryMastersService {
    private readonly prisma;
    private readonly audit;
    private readonly resolver;
    constructor(prisma: PrismaService, audit: AuditService, resolver: VariantResolverService);
    listCategories(organizationId: string): Prisma.PrismaPromise<({
        _count: {
            items: number;
        };
    } & {
        id: string;
        createdAt: Date;
        organizationId: string;
        isActive: boolean;
        updatedAt: Date;
        archivedAt: Date | null;
        name: string;
        description: string | null;
    })[]>;
    createCategory(organizationId: string, input: InventoryCategoryInput, actorUserId: string): Promise<{
        id: string;
        createdAt: Date;
        organizationId: string;
        isActive: boolean;
        updatedAt: Date;
        archivedAt: Date | null;
        name: string;
        description: string | null;
    }>;
    updateCategory(organizationId: string, id: string, input: Partial<InventoryCategoryInput>, actorUserId: string): Promise<{
        id: string;
        createdAt: Date;
        organizationId: string;
        isActive: boolean;
        updatedAt: Date;
        archivedAt: Date | null;
        name: string;
        description: string | null;
    }>;
    archiveCategory(organizationId: string, id: string, actorUserId: string): Promise<{
        id: string;
        createdAt: Date;
        organizationId: string;
        isActive: boolean;
        updatedAt: Date;
        archivedAt: Date | null;
        name: string;
        description: string | null;
    }>;
    listUnits(organizationId: string): Prisma.PrismaPromise<{
        id: string;
        createdAt: Date;
        organizationId: string;
        isActive: boolean;
        updatedAt: Date;
        archivedAt: Date | null;
        code: string;
        name: string;
        allowFractional: boolean;
    }[]>;
    createUnit(organizationId: string, input: UnitOfMeasureInput, actorUserId: string): Promise<{
        id: string;
        createdAt: Date;
        organizationId: string;
        isActive: boolean;
        updatedAt: Date;
        archivedAt: Date | null;
        code: string;
        name: string;
        allowFractional: boolean;
    }>;
    updateUnit(organizationId: string, id: string, input: Partial<UnitOfMeasureInput>, actorUserId: string): Promise<{
        id: string;
        createdAt: Date;
        organizationId: string;
        isActive: boolean;
        updatedAt: Date;
        archivedAt: Date | null;
        code: string;
        name: string;
        allowFractional: boolean;
    }>;
    listLocations(organizationId: string): Prisma.PrismaPromise<{
        id: string;
        createdAt: Date;
        organizationId: string;
        isActive: boolean;
        updatedAt: Date;
        code: string;
        name: string;
        isDefault: boolean;
    }[]>;
    createLocation(organizationId: string, input: StockLocationInput, actorUserId: string): Promise<{
        id: string;
        createdAt: Date;
        organizationId: string;
        isActive: boolean;
        updatedAt: Date;
        code: string;
        name: string;
        isDefault: boolean;
    }>;
    updateLocation(organizationId: string, id: string, input: Partial<StockLocationInput>, actorUserId: string): Promise<{
        id: string;
        createdAt: Date;
        organizationId: string;
        isActive: boolean;
        updatedAt: Date;
        code: string;
        name: string;
        isDefault: boolean;
    }>;
    listItems(organizationId: string, opts: {
        q?: string;
        categoryId?: string;
        locationId?: string;
        lowStockOnly?: boolean;
        includeArchived?: boolean;
        page: number;
        pageSize: number;
    }): Promise<{
        total: number;
        page: number;
        pageSize: number;
        items: {
            totalQty: string;
            isLow: boolean;
            isOut: boolean;
            balances: ({
                location: {
                    id: string;
                    name: string;
                };
            } & {
                id: string;
                organizationId: string;
                updatedAt: Date;
                itemId: string;
                inventoryVariantId: string;
                locationId: string;
                qtyOnHand: Prisma.Decimal;
                avgCost: Prisma.Decimal;
            })[];
            categoryRef: {
                name: string;
            } | null;
            unitRef: {
                code: string;
                name: string;
            } | null;
            preferredSupplier: {
                name: string;
            } | null;
            id: string;
            createdAt: Date;
            organizationId: string;
            isActive: boolean;
            updatedAt: Date;
            archivedAt: Date | null;
            code: string;
            name: string;
            description: string | null;
            notes: string | null;
            imageMediaId: string | null;
            category: string | null;
            sku: string | null;
            barcode: string | null;
            costPrice: Prisma.Decimal;
            sellPrice: Prisma.Decimal;
            uom: string;
            allowFractional: boolean;
            reorderLevel: Prisma.Decimal;
            categoryId: string | null;
            subcategory: string | null;
            minStockLevel: Prisma.Decimal;
            reorderQty: Prisma.Decimal | null;
            preferredSupplierId: string | null;
            defaultLocationId: string | null;
            unitId: string | null;
        }[];
    }>;
    getItem(organizationId: string, id: string): Promise<{
        movements: ({
            location: {
                name: string;
            };
        } & {
            id: string;
            createdAt: Date;
            organizationId: string;
            reason: string | null;
            type: import("@prisma/client").$Enums.StockMovementType;
            orderId: string | null;
            createdById: string | null;
            itemId: string;
            inventoryVariantId: string;
            locationId: string;
            qtyDelta: Prisma.Decimal;
            unitCost: Prisma.Decimal | null;
            reference: string | null;
            sourceType: string | null;
            sourceId: string | null;
        })[];
        costHistory: {
            id: string;
            createdAt: Date;
            organizationId: string;
            itemId: string;
            inventoryVariantId: string;
            locationId: string;
            sourceType: string;
            sourceId: string;
            prevQty: Prisma.Decimal;
            prevAvgCost: Prisma.Decimal;
            changeQty: Prisma.Decimal;
            changeUnitCost: Prisma.Decimal;
            newAvgCost: Prisma.Decimal;
        }[];
        balances: ({
            location: {
                id: string;
                name: string;
            };
        } & {
            id: string;
            organizationId: string;
            updatedAt: Date;
            itemId: string;
            inventoryVariantId: string;
            locationId: string;
            qtyOnHand: Prisma.Decimal;
            avgCost: Prisma.Decimal;
        })[];
        categoryRef: {
            id: string;
            createdAt: Date;
            organizationId: string;
            isActive: boolean;
            updatedAt: Date;
            archivedAt: Date | null;
            name: string;
            description: string | null;
        } | null;
        unitRef: {
            id: string;
            createdAt: Date;
            organizationId: string;
            isActive: boolean;
            updatedAt: Date;
            archivedAt: Date | null;
            code: string;
            name: string;
            allowFractional: boolean;
        } | null;
        preferredSupplier: {
            id: string;
            name: string;
        } | null;
        defaultLocation: {
            id: string;
            name: string;
        } | null;
        id: string;
        createdAt: Date;
        organizationId: string;
        isActive: boolean;
        updatedAt: Date;
        archivedAt: Date | null;
        code: string;
        name: string;
        description: string | null;
        notes: string | null;
        imageMediaId: string | null;
        category: string | null;
        sku: string | null;
        barcode: string | null;
        costPrice: Prisma.Decimal;
        sellPrice: Prisma.Decimal;
        uom: string;
        allowFractional: boolean;
        reorderLevel: Prisma.Decimal;
        categoryId: string | null;
        subcategory: string | null;
        minStockLevel: Prisma.Decimal;
        reorderQty: Prisma.Decimal | null;
        preferredSupplierId: string | null;
        defaultLocationId: string | null;
        unitId: string | null;
    }>;
    createItem(organizationId: string, input: ItemMasterCreateInput, actorUserId: string): Promise<{
        id: string;
        createdAt: Date;
        organizationId: string;
        isActive: boolean;
        updatedAt: Date;
        archivedAt: Date | null;
        code: string;
        name: string;
        description: string | null;
        notes: string | null;
        imageMediaId: string | null;
        category: string | null;
        sku: string | null;
        barcode: string | null;
        costPrice: Prisma.Decimal;
        sellPrice: Prisma.Decimal;
        uom: string;
        allowFractional: boolean;
        reorderLevel: Prisma.Decimal;
        categoryId: string | null;
        subcategory: string | null;
        minStockLevel: Prisma.Decimal;
        reorderQty: Prisma.Decimal | null;
        preferredSupplierId: string | null;
        defaultLocationId: string | null;
        unitId: string | null;
    }>;
    updateItem(organizationId: string, id: string, input: ItemMasterUpdateInput, actorUserId: string): Promise<{
        id: string;
        createdAt: Date;
        organizationId: string;
        isActive: boolean;
        updatedAt: Date;
        archivedAt: Date | null;
        code: string;
        name: string;
        description: string | null;
        notes: string | null;
        imageMediaId: string | null;
        category: string | null;
        sku: string | null;
        barcode: string | null;
        costPrice: Prisma.Decimal;
        sellPrice: Prisma.Decimal;
        uom: string;
        allowFractional: boolean;
        reorderLevel: Prisma.Decimal;
        categoryId: string | null;
        subcategory: string | null;
        minStockLevel: Prisma.Decimal;
        reorderQty: Prisma.Decimal | null;
        preferredSupplierId: string | null;
        defaultLocationId: string | null;
        unitId: string | null;
    }>;
    archiveItem(organizationId: string, id: string, actorUserId: string): Promise<{
        id: string;
        createdAt: Date;
        organizationId: string;
        isActive: boolean;
        updatedAt: Date;
        archivedAt: Date | null;
        code: string;
        name: string;
        description: string | null;
        notes: string | null;
        imageMediaId: string | null;
        category: string | null;
        sku: string | null;
        barcode: string | null;
        costPrice: Prisma.Decimal;
        sellPrice: Prisma.Decimal;
        uom: string;
        allowFractional: boolean;
        reorderLevel: Prisma.Decimal;
        categoryId: string | null;
        subcategory: string | null;
        minStockLevel: Prisma.Decimal;
        reorderQty: Prisma.Decimal | null;
        preferredSupplierId: string | null;
        defaultLocationId: string | null;
        unitId: string | null;
    }>;
    /** Cross-tenant guard: every referenced master must belong to this org. */
    private assertItemRefs;
    /** Compensation hook for the legacy create+opening flow: delete an item that has no stock/movements yet. */
    deleteFreshItem(organizationId: string, id: string): Promise<void>;
    /** Org default stock location id (falls back to any active location). */
    defaultLocationId(organizationId: string): Promise<string>;
    private mapItemInput;
    listMovements(organizationId: string, opts: {
        itemId?: string;
        locationId?: string;
        type?: string;
        from?: string;
        to?: string;
        page: number;
        pageSize: number;
    }): Promise<{
        total: number;
        page: number;
        pageSize: number;
        items: ({
            item: {
                code: string;
                name: string;
            };
            location: {
                name: string;
            };
        } & {
            id: string;
            createdAt: Date;
            organizationId: string;
            reason: string | null;
            type: import("@prisma/client").$Enums.StockMovementType;
            orderId: string | null;
            createdById: string | null;
            itemId: string;
            inventoryVariantId: string;
            locationId: string;
            qtyDelta: Prisma.Decimal;
            unitCost: Prisma.Decimal | null;
            reference: string | null;
            sourceType: string | null;
            sourceId: string | null;
        })[];
    }>;
    listAlerts(organizationId: string, status?: string): Promise<({
        item: {
            code: string;
            name: string;
        };
        location: {
            name: string;
        };
    } & {
        id: string;
        createdAt: Date;
        organizationId: string;
        status: import("@prisma/client").$Enums.InventoryAlertStatus;
        type: import("@prisma/client").$Enums.InventoryAlertType;
        resolvedAt: Date | null;
        itemId: string;
        inventoryVariantId: string;
        locationId: string;
        qtyAtTrigger: Prisma.Decimal;
        thresholdQty: Prisma.Decimal;
    })[]>;
}
//# sourceMappingURL=inventory-masters.service.d.ts.map