import type { CurrentUserPayload } from "../../common/decorators/current-user.decorator";
import { InventoryService } from './services/inventory.service';
import { CheckInDto, CheckOutDto, AdjustInventoryDto, TransferInventoryDto, QueryInventoryLogsDto, InventoryStatsDto, BulkInventoryOperationDto } from './dto/inventory.dto';
export declare class InventoryController {
    private readonly inventoryService;
    constructor(inventoryService: InventoryService);
    checkIn(checkInDto: CheckInDto, user: CurrentUserPayload): Promise<{
        part: {
            station: string | null;
            id: string;
            createdAt: Date;
            status: import("@prisma/client").$Enums.PartStatus;
            source: string | null;
            metadata: import("@prisma/client/runtime/library").JsonValue;
            updatedAt: Date;
            deletedAt: Date | null;
            customFields: import("@prisma/client/runtime/library").JsonValue | null;
            partNumber: string;
            partNameEn: string;
            partNameCn: string | null;
            unit: string;
            specifications: string | null;
            remark: string | null;
            currentStock: number;
            minStock: number;
            maxStock: number | null;
            warehouseLocation: string | null;
            warehouseId: string | null;
            storageLocationId: string | null;
            imageUrl: string | null;
            stationId: string | null;
        };
        log: {
            station: string | null;
            id: string;
            createdAt: Date;
            metadata: import("@prisma/client/runtime/library").JsonValue;
            operationType: import("@prisma/client").$Enums.InventoryOperationType;
            reason: string | null;
            operatorId: string;
            warehouseLocation: string | null;
            partId: string;
            quantity: number;
            previousStock: number;
            newStock: number;
            referenceType: string | null;
            referenceId: string | null;
            operatorName: string;
            scannedCode: string | null;
            deviceInfo: import("@prisma/client/runtime/library").JsonValue | null;
        };
        message: string;
    }>;
    checkOut(checkOutDto: CheckOutDto, user: CurrentUserPayload): Promise<{
        part: {
            station: string | null;
            id: string;
            createdAt: Date;
            status: import("@prisma/client").$Enums.PartStatus;
            source: string | null;
            metadata: import("@prisma/client/runtime/library").JsonValue;
            updatedAt: Date;
            deletedAt: Date | null;
            customFields: import("@prisma/client/runtime/library").JsonValue | null;
            partNumber: string;
            partNameEn: string;
            partNameCn: string | null;
            unit: string;
            specifications: string | null;
            remark: string | null;
            currentStock: number;
            minStock: number;
            maxStock: number | null;
            warehouseLocation: string | null;
            warehouseId: string | null;
            storageLocationId: string | null;
            imageUrl: string | null;
            stationId: string | null;
        };
        log: {
            station: string | null;
            id: string;
            createdAt: Date;
            metadata: import("@prisma/client/runtime/library").JsonValue;
            operationType: import("@prisma/client").$Enums.InventoryOperationType;
            reason: string | null;
            operatorId: string;
            warehouseLocation: string | null;
            partId: string;
            quantity: number;
            previousStock: number;
            newStock: number;
            referenceType: string | null;
            referenceId: string | null;
            operatorName: string;
            scannedCode: string | null;
            deviceInfo: import("@prisma/client/runtime/library").JsonValue | null;
        };
        message: string;
    }>;
    adjustInventory(adjustDto: AdjustInventoryDto, user: CurrentUserPayload): Promise<{
        part: {
            station: string | null;
            id: string;
            createdAt: Date;
            status: import("@prisma/client").$Enums.PartStatus;
            source: string | null;
            metadata: import("@prisma/client/runtime/library").JsonValue;
            updatedAt: Date;
            deletedAt: Date | null;
            customFields: import("@prisma/client/runtime/library").JsonValue | null;
            partNumber: string;
            partNameEn: string;
            partNameCn: string | null;
            unit: string;
            specifications: string | null;
            remark: string | null;
            currentStock: number;
            minStock: number;
            maxStock: number | null;
            warehouseLocation: string | null;
            warehouseId: string | null;
            storageLocationId: string | null;
            imageUrl: string | null;
            stationId: string | null;
        };
        log: {
            station: string | null;
            id: string;
            createdAt: Date;
            metadata: import("@prisma/client/runtime/library").JsonValue;
            operationType: import("@prisma/client").$Enums.InventoryOperationType;
            reason: string | null;
            operatorId: string;
            warehouseLocation: string | null;
            partId: string;
            quantity: number;
            previousStock: number;
            newStock: number;
            referenceType: string | null;
            referenceId: string | null;
            operatorName: string;
            scannedCode: string | null;
            deviceInfo: import("@prisma/client/runtime/library").JsonValue | null;
        };
        message: string;
    }>;
    transferInventory(transferDto: TransferInventoryDto, user: CurrentUserPayload): Promise<{
        log: {
            station: string | null;
            id: string;
            createdAt: Date;
            metadata: import("@prisma/client/runtime/library").JsonValue;
            operationType: import("@prisma/client").$Enums.InventoryOperationType;
            reason: string | null;
            operatorId: string;
            warehouseLocation: string | null;
            partId: string;
            quantity: number;
            previousStock: number;
            newStock: number;
            referenceType: string | null;
            referenceId: string | null;
            operatorName: string;
            scannedCode: string | null;
            deviceInfo: import("@prisma/client/runtime/library").JsonValue | null;
        };
        message: string;
    }>;
    findLogs(query: QueryInventoryLogsDto): Promise<{
        items: ({
            part: {
                id: string;
                partNumber: string;
                partNameEn: string;
                partNameCn: string | null;
                unit: string;
                currentStock: number;
            };
        } & {
            station: string | null;
            id: string;
            createdAt: Date;
            metadata: import("@prisma/client/runtime/library").JsonValue;
            operationType: import("@prisma/client").$Enums.InventoryOperationType;
            reason: string | null;
            operatorId: string;
            warehouseLocation: string | null;
            partId: string;
            quantity: number;
            previousStock: number;
            newStock: number;
            referenceType: string | null;
            referenceId: string | null;
            operatorName: string;
            scannedCode: string | null;
            deviceInfo: import("@prisma/client/runtime/library").JsonValue | null;
        })[];
        total: number;
        page: number;
        limit: number;
        totalPages: number;
    }>;
    getPartInventoryHistory(partId: string, days?: number): Promise<{
        station: string | null;
        createdAt: Date;
        operationType: import("@prisma/client").$Enums.InventoryOperationType;
        quantity: number;
        previousStock: number;
        newStock: number;
        operatorName: string;
    }[]>;
    getStats(query: InventoryStatsDto): Promise<{
        totalOperations: number;
        checkIns: number;
        checkOuts: number;
        adjustments: number;
        operationsByType: (import("@prisma/client").Prisma.PickEnumerable<import("@prisma/client").Prisma.InventoryLogGroupByOutputType, "operationType"[]> & {
            _count: number;
            _sum: {
                quantity: number | null;
            };
        })[];
        operationsByStation: (import("@prisma/client").Prisma.PickEnumerable<import("@prisma/client").Prisma.InventoryLogGroupByOutputType, "station"[]> & {
            _count: number;
        })[];
        topParts: {
            part: {
                id: string;
                partNumber: string;
                partNameEn: string;
                partNameCn: string | null;
                currentStock: number;
            } | undefined;
            partId: string;
            _count: number;
        }[];
    }>;
    bulkOperation(bulkDto: BulkInventoryOperationDto, user: CurrentUserPayload): Promise<{
        total: number;
        success: number;
        failed: number;
        errors: any[];
    }>;
}
