/**
 * This file is part of the MedSafe application which is commercial software created by MedVision360 B.V.
 * The source code is proprietary and confidential.
 *
 * Unauthorized copying of this file, via any medium is strictly prohibited.
 *
 * Copyright (c) by MedVision360 B.V. All rights reserved.
 *
 * For the application name: io.medrecord.medsafe
 */
import { Observable } from 'rxjs';
import { DynamicMeasurementsActions } from './dynamic-measurements.actions';
import { AbstractReducer } from '../../core/models/state/abstract-reducer';
import { ThresholdModel } from '../../shared/models';
import { MeasurementStructureModel } from '../models/measurement-structure-model';
import { MeasurementThresholdModel } from '../models/measurement-threshold';
import { MeasurementDataStructureModel } from '../models/measurement-data-structure';
import { MeasurementDataListModel } from '../models/measurement-data-list';
import { MeasurementDataInfoModel } from '../models/measurement-data-info';
import { FormControlModel } from '../../core/models/form/form-control-model';
export declare const dynamicMeasurementsStorageName = "dynamic_measurements";
export interface DynamicMeasurementsState {
    isMeasurementsDataLoaded: boolean;
    measurementsStructure: MeasurementStructureModel[];
    measurementsData: {
        [K: string]: MeasurementDataStructureModel;
    };
    thresholds: ThresholdModel[];
    healthScore: number;
    enabledMeasurements: string[];
}
export declare const defaultState: DynamicMeasurementsState;
export declare const DynamicMeasurementDataPayload: DynamicMeasurementsState;
/**
 * Measurement data count loaded action
 */
export declare function measurementDataCountLoadedAction(action: any, state: any): {
    measurementsData: any;
};
/**
 * Measurement data list loaded action
 */
export declare function measurementDataListLoadedAction(action: any, state: any): {
    measurementsData: any;
};
export declare class DynamicMeasurementsReducer extends AbstractReducer<DynamicMeasurementsState> {
    actions: DynamicMeasurementsActions;
    /**
     * Select health score
     */
    selectHealthScore: () => Observable<number>;
    /**
     * Select is measurements data loaded
     */
    selectIsMeasurementsDataLoaded: () => Observable<boolean>;
    /**
     * Select thresholds
     */
    selectThresholds: () => Observable<ThresholdModel[]>;
    /**
     * Select enabled measurements
     */
    selectEnabledMeasurements: () => Observable<string[]>;
    /**
     * Select measurement structure
     */
    selectMeasurementsStructure: () => Observable<MeasurementStructureModel[]>;
    /**
     * Select measurements data
     */
    selectMeasurementsData: () => Observable<{
        [K: string]: MeasurementDataStructureModel;
    }>;
    /**
     * Select active thresholds
     */
    selectActiveThresholds(): Observable<ThresholdModel[]>;
    /**
     * Select active measurements structure
     */
    selectActiveMeasurementsStructure(): Observable<MeasurementStructureModel[]>;
    /**
     * Select measurement data
     */
    selectMeasurementData(measurementType: string): Observable<MeasurementDataStructureModel>;
    /**
     * Select measurement data form controls
     */
    selectMeasurementFormControls(measurementType: string, measurementId?: number): Observable<FormControlModel[]>;
    /**
     * Select measurement data info
     */
    selectMeasurementDataInfo(measurementType: string, measurementId: number): Observable<MeasurementDataInfoModel>;
    /**
     * Select measurement data list
     */
    selectMeasurementDataList(measurementType: string): Observable<MeasurementDataListModel>;
    /**
     * Select measurements structure
     */
    selectMeasurementStructure(measurementType: string): Observable<MeasurementStructureModel>;
    /**
     * Select measurements thresholds
     */
    selectMeasurementsThresholds(defaultOffset: number, defaultValue: number | string): Observable<MeasurementThresholdModel[]>;
    /**
     * Constructor
     */
    constructor(actions: DynamicMeasurementsActions);
}
