import { IManagedObject, IResultList } from '@c8y/client';
import * as i0 from '@angular/core';
import { EventEmitter, QueryList, OnChanges, SimpleChanges } from '@angular/core';
import { ListItemRadioComponent, ModalService, C8yStepper } from '@c8y/ngx-components';
import { RepositoryService } from '@c8y/ngx-components/repository/shared';
import { TranslateService } from '@ngx-translate/core';
import { BehaviorSubject, Observable } from 'rxjs';
import { CdkStep } from '@angular/cdk/stepper';
import { BaseStepperComponent } from '@c8y/ngx-components/operations/bulk-operation-stepper';
import { BulkOperationType, OperationDetails } from '@c8y/ngx-components/operations/bulk-operations-service';

interface ISelectedSoftware {
    software: IManagedObject;
    version: IManagedObject;
    action: string;
}
interface ISoftwareUpdateOperationPrototype {
    name: string;
    version: string;
    url: string;
    action: string;
}

declare class SelectSoftwareStepComponent {
    private repositoryService;
    private translate;
    software: EventEmitter<ISelectedSoftware>;
    textFilter$: BehaviorSubject<string>;
    deviceType$: BehaviorSubject<string>;
    softwareTypeFilter$: BehaviorSubject<string>;
    deviceTypes: any[];
    selectedDeviceType: {
        name: string;
    };
    isLegacy: any;
    software$: Observable<IResultList<IManagedObject>>;
    readonly NO_DEVICE_TYPE_AVAILABLE: "No device type available";
    radioButtons: QueryList<ListItemRadioComponent>;
    private deviceTypeSubscription;
    constructor(repositoryService: RepositoryService, translate: TranslateService);
    getBaseVersionsCount$(software: IManagedObject): Observable<number>;
    getVersions(software: IManagedObject): Promise<IResultList<IManagedObject>>;
    getDeviceTypeTitle(software: IManagedObject): string;
    loadDeviceTypes(): void;
    ngOnDestroy(): void;
    resetSelection(): void;
    selectSoftware({ option, software }: {
        option: any;
        software: any;
    }): void;
    emitSoftware({ option, software }: {
        option: any;
        software: any;
    }): void;
    private getSoftware;
    static ɵfac: i0.ɵɵFactoryDeclaration<SelectSoftwareStepComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<SelectSoftwareStepComponent, "c8y-select-software-step", never, {}, { "software": "software"; }, never, never, true, never>;
}

declare class ConfirmSoftwareSelectionStepComponent implements OnChanges {
    selectedItems: ISelectedSoftware[];
    title: string;
    ngOnChanges(changes: SimpleChanges): void;
    get selectedToInstall(): ISelectedSoftware[];
    get selectedToDelete(): ISelectedSoftware[];
    get deviceTypes(): any;
    static ɵfac: i0.ɵɵFactoryDeclaration<ConfirmSoftwareSelectionStepComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<ConfirmSoftwareSelectionStepComponent, "c8y-confirm-software-selection-step", never, { "selectedItems": { "alias": "selectedItems"; "required": false; }; }, {}, never, never, true, never>;
}

declare class StepperBulkTypeSoftwareComponent extends BaseStepperComponent {
    private modal;
    private translate;
    readonly type: BulkOperationType;
    readonly descriptionTemplateSingle: string;
    readonly descriptionTemplateOneOther: string;
    readonly descriptionTemplateMultiple: string;
    selectedSoftware: ISelectedSoftware[];
    selectSoftware: SelectSoftwareStepComponent;
    constructor(modal: ModalService, translate: TranslateService);
    onSoftwareSelected(selectedItem: any): void;
    confirmSoftwareSelection($event: {
        stepper: C8yStepper;
        step: CdkStep;
    }): Promise<void>;
    protected retrieveOperationPrototype(): OperationDetails;
    private getUniqueDeviceTypes;
    static ɵfac: i0.ɵɵFactoryDeclaration<StepperBulkTypeSoftwareComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<StepperBulkTypeSoftwareComponent, "c8y-stepper-bulk-type-software", never, {}, {}, never, never, true, never>;
}

/** Module for the 'Software update' operation type stepper */
declare class StepperBulkTypeSoftwareModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<StepperBulkTypeSoftwareModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<StepperBulkTypeSoftwareModule, never, [typeof StepperBulkTypeSoftwareComponent, typeof ConfirmSoftwareSelectionStepComponent, typeof SelectSoftwareStepComponent], [typeof StepperBulkTypeSoftwareComponent]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<StepperBulkTypeSoftwareModule>;
}

export { ConfirmSoftwareSelectionStepComponent, SelectSoftwareStepComponent, StepperBulkTypeSoftwareComponent, StepperBulkTypeSoftwareModule };
export type { ISelectedSoftware, ISoftwareUpdateOperationPrototype };
//# sourceMappingURL=index.d.ts.map
