import type { Loggable } from 'brolog';
import { StateSwitchOptions, ServiceableAbstract, StateSwitchInterface } from '../interfaces.js';
import { BusyIndicator } from '../busy-indicator.js';
declare const serviceCtlMixin: (serviceCtlName?: string, options?: StateSwitchOptions | undefined) => <SuperClass extends typeof ServiceableAbstract>(superClass: SuperClass) => ((abstract new (...args: any[]) => {
    state: StateSwitchInterface;
    __serviceCtlResettingIndicator: BusyIndicator;
    __serviceCtlLogger: Loggable;
    start(): Promise<void>;
    stop(): Promise<void>;
    reset(): Promise<void>;
    /**
     * onStart & onStop must be implemented by the child class
     */
    onStart(): Promise<void>;
    onStop(): Promise<void>;
    emit(..._: any[]): any;
}) & {
    VERSION: string;
}) & SuperClass;
declare const ServiceCtl_base: ((abstract new (...args: any[]) => {
    state: StateSwitchInterface;
    __serviceCtlResettingIndicator: BusyIndicator;
    __serviceCtlLogger: Loggable;
    start(): Promise<void>;
    stop(): Promise<void>;
    reset(): Promise<void>;
    /**
     * onStart & onStop must be implemented by the child class
     */
    onStart(): Promise<void>;
    onStop(): Promise<void>;
    emit(..._: any[]): any;
}) & {
    VERSION: string;
}) & typeof ServiceableAbstract;
declare abstract class ServiceCtl extends ServiceCtl_base {
}
export { ServiceCtl, serviceCtlMixin, };
//# sourceMappingURL=service-ctl.d.ts.map