import type { CurrentUserPayload } from "../../common/decorators/current-user.decorator";
import { AlertService } from './services/alert.service';
import { QueryStockAlertsDto, AcknowledgeAlertDto, ResolveAlertDto } from './dto/inventory.dto';
export declare class AlertsController {
    private readonly alertService;
    constructor(alertService: AlertService);
    findAll(query: QueryStockAlertsDto): Promise<{
        items: ({
            part: {
                station: string | null;
                id: string;
                partNumber: string;
                partNameEn: string;
                partNameCn: string | null;
                currentStock: number;
                minStock: number;
                maxStock: number | null;
                warehouseLocation: string | null;
            };
        } & {
            message: string;
            id: string;
            createdAt: Date;
            status: import("@prisma/client").$Enums.AlertStatus;
            updatedAt: Date;
            severity: import("@prisma/client").$Enums.AlertSeverity;
            alertType: import("@prisma/client").$Enums.StockAlertType;
            acknowledgedAt: Date | null;
            acknowledgedBy: string | null;
            threshold: number;
            resolvedAt: Date | null;
            resolvedBy: string | null;
            resolution: string | null;
            currentStock: number;
            partId: string;
        })[];
        total: number;
        page: number;
        limit: number;
        totalPages: number;
    }>;
    findOne(id: string): 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;
        };
    } & {
        message: string;
        id: string;
        createdAt: Date;
        status: import("@prisma/client").$Enums.AlertStatus;
        updatedAt: Date;
        severity: import("@prisma/client").$Enums.AlertSeverity;
        alertType: import("@prisma/client").$Enums.StockAlertType;
        acknowledgedAt: Date | null;
        acknowledgedBy: string | null;
        threshold: number;
        resolvedAt: Date | null;
        resolvedBy: string | null;
        resolution: string | null;
        currentStock: number;
        partId: string;
    }>;
    acknowledge(acknowledgeDto: AcknowledgeAlertDto, user: CurrentUserPayload): Promise<{
        alert: {
            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;
            };
        } & {
            message: string;
            id: string;
            createdAt: Date;
            status: import("@prisma/client").$Enums.AlertStatus;
            updatedAt: Date;
            severity: import("@prisma/client").$Enums.AlertSeverity;
            alertType: import("@prisma/client").$Enums.StockAlertType;
            acknowledgedAt: Date | null;
            acknowledgedBy: string | null;
            threshold: number;
            resolvedAt: Date | null;
            resolvedBy: string | null;
            resolution: string | null;
            currentStock: number;
            partId: string;
        };
        message: string;
    }>;
    resolve(resolveDto: ResolveAlertDto, user: CurrentUserPayload): Promise<{
        alert: {
            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;
            };
        } & {
            message: string;
            id: string;
            createdAt: Date;
            status: import("@prisma/client").$Enums.AlertStatus;
            updatedAt: Date;
            severity: import("@prisma/client").$Enums.AlertSeverity;
            alertType: import("@prisma/client").$Enums.StockAlertType;
            acknowledgedAt: Date | null;
            acknowledgedBy: string | null;
            threshold: number;
            resolvedAt: Date | null;
            resolvedBy: string | null;
            resolution: string | null;
            currentStock: number;
            partId: string;
        };
        message: string;
    }>;
    bulkAcknowledge(alertIds: string[], user: CurrentUserPayload): Promise<{
        updated: number;
        message: string;
    }>;
    bulkResolve(alertIds: string[], resolution: string, user: CurrentUserPayload): Promise<{
        updated: number;
        message: string;
    }>;
    getStats(): Promise<{
        totalAlerts: number;
        pendingAlerts: number;
        acknowledgedAlerts: number;
        resolvedAlerts: number;
        alertsBySeverity: (import("@prisma/client").Prisma.PickEnumerable<import("@prisma/client").Prisma.StockAlertGroupByOutputType, "severity"[]> & {
            _count: number;
        })[];
        alertsByType: (import("@prisma/client").Prisma.PickEnumerable<import("@prisma/client").Prisma.StockAlertGroupByOutputType, "alertType"[]> & {
            _count: number;
        })[];
        topAlertedParts: {
            part: {
                id: string;
                partNumber: string;
                partNameEn: string;
                partNameCn: string | null;
                currentStock: number;
                minStock: number;
            } | undefined;
            partId: string;
            _count: number;
        }[];
    }>;
    autoResolveFixedAlerts(): Promise<{
        resolved: number;
        message: string;
    }>;
}
