import { InjectionToken } from '@angular/core';
import { AlarmStatusSettings, AlarmStatusType, IAlarm, IManagedObject, SeverityFilter, SeverityType } from '@c8y/client';
import { DateTimeContext, NavigatorNode, NavigatorNodeData, Route } from '@c8y/ngx-components';
import { QueryParamsHandling } from '@angular/router';
import type { SupportedIcons } from '@c8y/ngx-components/icon-selector/icons';
import { Observable } from 'rxjs';
import { AlarmFilterInterval } from '@c8y/ngx-components/interval-picker';
export interface AlarmsModuleConfig {
    /**
     * Indicates whether the application is a combination of Angular and AngularJS.
     * @optional
     */
    hybrid?: boolean;
    /**
     * The root node of the navigator, which can be either a `NavigatorNode` or `NavigatorNodeData`.
     * This serves as the entry point for navigation structure for Alarms views.
     * @optional
     */
    rootNavigatorNode?: NavigatorNode | NavigatorNodeData;
    /**
     * An array of `Route` objects representing the navigation routes available.
     * Each route defines a navigation path and its associated components related to Alarms.
     * @optional
     */
    route?: Route[];
}
export declare const ALARMS_MODULE_CONFIG: InjectionToken<unknown>;
export type AlarmCount = {
    [key in SeverityType]: number;
};
export declare const ALARM_STATUS_ICON: {
    readonly ALERT_IDLE: "c8y-alert-idle";
    readonly BELL_SLASH: "bell-slash";
    readonly BELL: "bell";
};
export type AlarmStatusIcon = (typeof ALARM_STATUS_ICON)[keyof typeof ALARM_STATUS_ICON];
/**
 * A lookup table to map alarm statuses to corresponding icons.
 */
export declare const AlarmIconMap: Record<AlarmStatusType, AlarmStatusIcon>;
export declare const ALARM_SEVERITY_ICON: {
    readonly CIRCLE: "circle";
    readonly HIGH_PRIORITY: "high-priority";
    readonly WARNING: "warning";
    readonly EXCLAMATION_CIRCLE: "exclamation-circle";
};
export declare const HELP_ICON = "help";
export type AlarmSeverityIcon = (typeof ALARM_SEVERITY_ICON)[keyof typeof ALARM_SEVERITY_ICON];
/**
 * A lookup table to map alarm severity types to corresponding icons.
 */
export declare const ALARM_SEVERITY_ICON_MAP: Record<SeverityType, AlarmSeverityIcon>;
export type AlarmListFormFilters = {
    showCleared: boolean;
    severityOptions: SeverityFilter;
    selectedDates?: DateTimeContext;
};
/**
 * Extended interval titles with an additional title for the case when no date is selected.
 */
export declare const INTERVAL_TITLES_EXTENDED: Record<AlarmFilterInterval['id'], string>;
export declare const INTERVALS_EXTENDED: AlarmFilterInterval[];
export type WidgetTimeContextStateExtended = {
    date: DateTimeContext;
    interval: AlarmFilterInterval['id'];
};
export type SelectedAlarm = IAlarm | null;
export declare const DEFAULT_ALARM_COUNTS: AlarmCount;
export declare const DEFAULT_SEVERITY_VALUES: SeverityFilter;
export declare const DEFAULT_STATUS_VALUES: AlarmStatusSettings;
export declare const ALARMS_PATH = "alarms";
export type CustomFragment = {
    [key: string]: unknown;
};
/**
 * Default properties of a alarm. Used to extract the custom properties from a Alarm object.
 */
export declare const ALARM_DEFAULT_PROPERTIES: readonly ["severity", "source", "type", "time", "text", "id", "status", "count", "name", "history", "self", "creationTime", "firstOccurrenceTime", "lastUpdated"];
export declare const THROTTLE_REALTIME_REFRESH = 1000;
/**
 * Represents the navigation options for an alarm component.
 */
export type AlarmNavigationOptions = {
    /**
     * Defines if the alarm should navigate to a detail view when clicked.
     */
    allowNavigationToAlarmsView: boolean;
    /**
     * Defines if the component should try to determine the context to navigate
     * to the correct alarm detail view or not. If set to true, the component will
     * not try to determine the context and will always navigate to the all alarms view.
     */
    alwaysNavigateToAllAlarms: boolean;
    /**
     * Defines if the cleared query parameter should be included in the navigation if
     * the alarm is cleared.
     */
    includeClearedQueryParams: boolean;
    /**
     * Determines how query parameters should be handled during navigation.
     * This property can be set to one of three values:
     *
     * - `"merge"` : Merge new parameters with current parameters.
     * - `"preserve"` : Preserve current parameters.
     * - `""` : Replace current parameters with new parameters. This is the default behavior.
     */
    queryParamsHandling: QueryParamsHandling;
};
export interface AlarmDetailsButton {
    additionalButtonClasses?: string;
    title: string;
    icon: SupportedIcons;
    additionalIconClasses?: string;
    label?: string;
    disabled?: boolean;
    /**
     * Action to be executed when the button is clicked.
     * @param alarm The alarm to apply this action to
     * @returns A boolean or a promise that resolves to a boolean or to the updated alarm. If the result is true, a reload will be triggered. If the result is an alarm, the alarm will be updated with the new values.
     */
    action: (alarm: IAlarm) => boolean | Promise<boolean | IAlarm>;
    priority?: number;
}
export interface AlarmListIndicatorBase {
    priority?: number;
}
export interface AlarmListIndicatorIcon extends AlarmListIndicatorBase {
    icon: SupportedIcons;
    title: string;
    class?: string;
}
export type AlarmListIndicator = AlarmListIndicatorIcon;
declare global {
    namespace CumulocityServiceRegistry {
        interface SpecificExtensionKeys {
            alarmDetailsButton: AlarmDetailsButtonProvider;
            alarmListIndicator: AlarmListIndicatorProvider;
        }
        interface AlarmDetailsButtonProvider {
            /**
             * Determines whether the button should be shown for a given alarm.
             * @param alarm The alarm for which to determine button visibility.
             * @param source The managed object associated with the alarm.
             * @returns The button details or false.
             */
            getAlarmDetailsButton$(alarm: IAlarm, source: IManagedObject): Observable<AlarmDetailsButton | false>;
        }
        interface AlarmListIndicatorProvider {
            /**
             * Determines whether the indicator should be shown for a given alarm.
             * @param alarm The alarm for which to determine indicator visibility.
             * @returns The indicator details or false.
             */
            getAlarmListIndicator$(alarm: IAlarm): Observable<AlarmListIndicator | false>;
        }
    }
}
//# sourceMappingURL=alarms.model.d.ts.map