import { OnDestroy, OnInit } from '@angular/core';
import { FormBuilder, NgForm, ValidatorFn } from '@angular/forms';
import { AggregationOptionStatus, AggregationService } from '@c8y/ngx-components';
import { WidgetConfigComponent } from '@c8y/ngx-components/context-dashboard';
import { DatapointAttributesFormConfig, DatapointSelectorModalOptions } from '@c8y/ngx-components/datapoint-selector';
import { DatapointsTableConfig } from '../datapoints-table-widget.model';
import { DatapointsTableService } from '../datapoints-table.service';
import * as i0 from "@angular/core";
export declare function minOneDatapointActive(): ValidatorFn;
export declare class DatapointsTableWidgetConfigComponent implements OnInit, OnDestroy {
    private aggregationService;
    private datapointsTableService;
    private formBuilder;
    private form;
    private widgetConfig;
    /**
     *  Data points table widget config.
     */
    config: DatapointsTableConfig;
    readonly AGGREGATION_LABELS: {
        readonly NONE: string;
        readonly MINUTELY: string;
        readonly HOURLY: string;
        readonly DAILY: string;
    };
    readonly DATE_SELECTION_LABELS: {
        readonly config: "Widget configuration";
        readonly view_and_config: "Widget and widget configuration";
        readonly dashboard_context: "Dashboard time range";
    };
    readonly DEFAULT_DATE_SELECTOR_VALUE: "dashboard_context";
    readonly DEFAULT_INTERVAL_VALUE: "hours";
    readonly TIME_RANGE_INTERVAL_LABELS: {
        readonly minutes: "Last minute";
        readonly hours: "Last hour";
        readonly days: "Last day";
        readonly weeks: "Last week";
        readonly months: "Last month";
        readonly custom: "Custom";
    };
    readonly AGGREGATION_VALUES_ARR: readonly ["NONE", import("packages/client/lib").aggregationType.MINUTELY, import("packages/client/lib").aggregationType.HOURLY, import("packages/client/lib").aggregationType.DAILY];
    readonly DATE_SELECTION_VALUES_ARR: readonly ["dashboard_context", "config", "view_and_config"];
    readonly INTERVAL_VALUES_ARR: readonly ["minutes", "hours", "days", "weeks", "months", "custom"];
    readonly REFRESH_INTERVAL_VALUES_ARR: number[];
    datapointSelectionConfig: Partial<DatapointSelectorModalOptions>;
    disabledAggregationOptions: AggregationOptionStatus;
    defaultFormOptions: Partial<DatapointAttributesFormConfig>;
    formGroup: ReturnType<DatapointsTableWidgetConfigComponent['createForm']>;
    isWidgetLinkedToGlobalTimeContext: boolean;
    private decimalLimits;
    /**
     * Indicate when the time interval selector item has been changed programmatically.
     *
     * This property is used to track changes in the time interval selector
     * that are not triggered by direct user interaction, but by the application itself.
     *
     * In our case, the date selector and the interval selector are linked.
     * So, when one of them changes, it affects the other.
     * For example, selecting "Last hour" in the interval selector should automatically update the date range to the last hour.
     * But without this flag, changing the date range would also update the interval selector, resulting in "Custom date" being selected.
     * This happens because the system would interpret the behavior this way.
     */
    private isIntervalSelectorChangedProgrammatically;
    private destroy$;
    constructor(aggregationService: AggregationService, datapointsTableService: DatapointsTableService, formBuilder: FormBuilder, form: NgForm, widgetConfig: WidgetConfigComponent);
    ngOnInit(): void;
    ngOnDestroy(): void;
    onBeforeSave(config?: DatapointsTableConfig): void;
    toggleRefreshIntervalControl(): void;
    private updateTimeContext;
    private initForm;
    private createForm;
    private determineGlobalDateSelectorValueForLegacyWidget;
    private isAutoRefershDisabled;
    /**
     * Handles changes to the auto-refresh toggle control and updates the aggregation control accordingly.
     *
     * This method subscribes to the value changes of the auto-refresh toggle form control.
     * When auto-refresh is enabled, the aggregation control's value is set to 'none' and the control is
     * visually disabled (but not programmatically disabled to ensure the value is saved).
     * When auto-refresh is disabled, the aggregation control is enabled.
     */
    private handleAutoRefreshToggleChanges;
    /**
     * Handles changes in the interval selector form control.
     */
    private handleIntervalSelectorChanges;
    private handleNonCustomInterval;
    private updateDateRange;
    private updateDisabledAggregationOptions;
    private updateAggregationIfAutoRefreshDisabled;
    private setAggregationValue;
    /**
     * Handles changes in the date selector form control.
     */
    private handleDateSelectorChanges;
    private handleDateChange;
    private handleCustomIntervalDateChange;
    private setIntervalToCustom;
    /**
     * Handles changes in the global date selector form control.
     */
    private handleGlobalDateSelectorChanges;
    private handleDashboardContext;
    private handleNonDashboardContext;
    private isConfigSavedWithoutDashboardTimeOption;
    private updateAggregationIfNecessary;
    /**
     * Sets the aggregation control to the first available (non-disabled) option if the current option is disabled.
     *
     * This method:
     * - Retrieves the current value of the aggregation control.
     * - Checks if the current aggregation option is disabled.
     * - If the current option is disabled, sets the control to the first available (non-disabled) option based on the following order:
     *   - If the current value is `DAILY`, it switches to `HOURLY` if it's not disabled, otherwise to `MINUTELY` if `HOURLY` is also disabled.
     *   - If the current value is `HOURLY`, it switches to `MINUTELY` if it's not disabled.
     *   - If all options are disabled, it sets the value to `NONE`.
     *
     * The disabled state is stored in the `disabledAggregationOptions` object,
     * where the key is the aggregation value and the value is a boolean indicating whether the option is disabled.
     *
     * The `AGGREGATION_VALUES` object defines the possible aggregation values.
     */
    private setToFirstAvailableAggregationOptionIfCurrentAggregationIsDisabled;
    private deleteAggregationProperty;
    static ɵfac: i0.ɵɵFactoryDeclaration<DatapointsTableWidgetConfigComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<DatapointsTableWidgetConfigComponent, "c8y-datapoints-table-view-config", never, { "config": { "alias": "config"; "required": false; }; }, {}, never, never, true, never>;
}
//# sourceMappingURL=datapoints-table-config.component.d.ts.map