import { IAlertDocument } from "./Alert.model";
import { CreateAlertData, UpdateAlertData, AlertCategory, AlertSeverity, IAlertQuery } from "./alert.types";
import { AlertBuilder } from "./AlertBuilder";
import { IDevice } from "../entities/device/local/interfaces";
import { Source } from "../constants";
export declare class AlertService {
    private readonly alertRepository;
    constructor();
    /**
     * Create an operations alert using AlertBuilder
     */
    raiseOperationsAlert(data: CreateAlertData): Promise<IAlertDocument | null>;
    /**
     * Create a security alert using AlertBuilder
     */
    raiseSecurityAlert(data: CreateAlertData): Promise<IAlertDocument | null>;
    raiseDeviceAlert(data: CreateAlertData): Promise<IAlertDocument | null>;
    /**
     * Create a hub-specific alert using AlertBuilder
     */
    raiseHubAlert(data: CreateAlertData): Promise<IAlertDocument | null>;
    raiseDeviceTamperAttemptAlert(device: IDevice, zone: any, source: Source): Promise<IAlertDocument | null>;
    raiseDoorLeftOpenAlert(device: IDevice, zone: any, openThreshold: number, source: Source): Promise<IAlertDocument | null>;
    raiseIncorrectCodeAlert(device: IDevice, zone: any, source: Source, accessCount: number, timeWindow: {
        startDate: string;
        endDate: string;
    }): Promise<IAlertDocument | null>;
    raiseNewDeviceAlert(connection: {
        id: string;
        provider: string;
        deviceCount: number;
        type?: string;
    }, propertyId: string, source: Source): Promise<IAlertDocument | null>;
    raiseDoorOpenFrequentAlert(device: IDevice, zone: any, accessTimes: number, openThreshold: number, source: Source): Promise<IAlertDocument | null>;
    raiseDoorOpenOutsideBusinessHoursAlert(device: IDevice, zone: any, source: Source): Promise<IAlertDocument | null>;
    /**
     * Raise alert for device coming online (OPERATIONAL only)
     */
    raiseDeviceOnlineAlert(device: IDevice, source: Source): Promise<IAlertDocument | null>;
    raiseLockAccessEmergencyCodeAlert(device: IDevice, zone: any, source: Source): Promise<IAlertDocument | null>;
    raiseLockAccessEmergencyRfidAlert(device: IDevice, zone: any, source: Source): Promise<IAlertDocument | null>;
    raiseLockAccessMasterRfidAlert(device: IDevice, zone: any, source: Source): Promise<IAlertDocument | null>;
    raiseLockAccessMasterCodeAlert(device: IDevice, zone: any, source: Source): Promise<IAlertDocument | null>;
    raiseSpecificDoorAccessAlert(userName: string, device: IDevice, zone: any, source: Source): Promise<IAlertDocument | null>;
    raiseGuestLockFirstAccessAlert(userName: string, device: IDevice, zone: any, source: Source): Promise<IAlertDocument | null>;
    raiseZoneNotMappedToAccessGroupAlert(zone: any, source: Source): Promise<IAlertDocument | null>;
    /**
     * Create a new alert with business logic validation
     * Accepts either a CreateAlertData object or an AlertBuilder instance
     */
    createAlert(alertData: CreateAlertData | AlertBuilder): Promise<IAlertDocument | null>;
    /**
     * Get alert by ID with business logic
     */
    getAlertById(id: string, includeDeleted?: boolean): Promise<IAlertDocument | null>;
    /**
     * Get all alerts with business logic filtering
     */
    queryAlerts(filters?: IAlertQuery): Promise<IAlertDocument[]>;
    alertCount(filters: IAlertQuery): Promise<number>;
    /**
     * Update an alert with business logic validation
     */
    updateAlert(id: string, updateData: UpdateAlertData): Promise<IAlertDocument | null>;
    deleteAlerts(filters: IAlertQuery, deletedBy: string, softDelete?: boolean): Promise<boolean>;
    /**
     * Soft delete an alert with business logic
     */
    deleteAlert(id: string, deletedBy: string): Promise<boolean>;
    /**
     * Mark alert as read with business logic
     */
    markAsRead(id: string, updatedBy: string): Promise<IAlertDocument | null>;
    /**
     * Mark alert as unread with business logic
     */
    markAsUnread(id: string, updatedBy: string): Promise<IAlertDocument | null>;
    /**
     * Activate an alert with business logic
     */
    activateAlert(id: string, updatedBy: string): Promise<IAlertDocument | null>;
    /**
     * Deactivate an alert with business logic
     */
    deactivateAlert(query: IAlertQuery, updatedBy: string): Promise<IAlertDocument | null>;
    /**
     * Snooze an alert with business logic
     */
    snoozeAlert(id: string, updatedBy: string, until?: Date): Promise<IAlertDocument | null>;
    /**
     * Unsnooze an alert with business logic
     */
    unsnoozeAlert(id: string, updatedBy: string): Promise<IAlertDocument | null>;
    /**
     * Get alerts by category with business logic
     */
    getAlertsByCategory(category: AlertCategory, includeDeleted?: boolean): Promise<IAlertDocument[]>;
    /**
     * Get snoozed alerts with business logic
     */
    getSnoozedAlerts(includeDeleted?: boolean): Promise<IAlertDocument[]>;
    /**
     * Get expired snooze alerts with business logic
     */
    getExpiredSnoozeAlerts(includeDeleted?: boolean): Promise<IAlertDocument[]>;
    /**
     * Get alert statistics with business logic
     */
    getAlertStatistics(propertyId?: string, zoneId?: string): Promise<{
        total: number;
        active: number;
        unread: number;
        snoozed: number;
        bySeverity: Record<AlertSeverity, number>;
        byCategory: Record<AlertCategory, number>;
    }>;
    /**
     * Get alerts by zone ID
     */
    getAlertsByZoneId(zoneId: string, includeDeleted?: boolean): Promise<IAlertDocument[]>;
    /**
     * Get alerts by zone ID and category
     */
    getAlertsByZoneIdAndCategory(zoneId: string, category: AlertCategory, includeDeleted?: boolean): Promise<IAlertDocument[]>;
    /**
     * Get alerts by zone ID and severity
     */
    getAlertsByZoneIdAndSeverity(zoneId: string, severity: AlertSeverity, includeDeleted?: boolean): Promise<IAlertDocument[]>;
    /**
     * Get alerts by multiple zone IDs
     */
    getAlertsByZoneIds(zoneIds: string[], includeDeleted?: boolean): Promise<IAlertDocument[]>;
    /**
     * Get alert statistics by zone ID and severity
     */
    getAlertStatisticsByZoneAndSeverity(zoneId: string, severity?: AlertSeverity): Promise<{
        total: number;
        active: number;
        unread: number;
        snoozed: number;
        byCategory: Record<AlertCategory, number>;
    }>;
    /**
     * Get alerts by zone ID and active status
     */
    getAlertsByZoneIdAndActiveStatus(zoneId: string, isActive: boolean, includeDeleted?: boolean): Promise<IAlertDocument[]>;
    /**
     * Get alerts by zone ID and read status
     */
    getAlertsByZoneIdAndReadStatus(zoneId: string, isRead: boolean, includeDeleted?: boolean): Promise<IAlertDocument[]>;
    private validateAlertData;
    private validateFilters;
    private validateUpdateData;
    private validateSnoozeDate;
    private determineDefaultSeverity;
    private applyBusinessRules;
}
