/**
 * Domain Layer - Gain Control Business Logic
 * Pure business logic with no dependencies on frameworks or infrastructure
 */
export interface GainPolicy {
    readonly minGain: number;
    readonly maxGain: number;
    readonly defaultGain: number;
    readonly step: number;
}
export declare const MEDICAL_GAIN_POLICY: GainPolicy;
export declare const BROADCAST_GAIN_POLICY: GainPolicy;
export declare class GainValue {
    private readonly value;
    private constructor();
    static create(value: number, policy?: GainPolicy): GainValue;
    getValue(): number;
    getDbValue(): number;
    increment(policy: GainPolicy): GainValue;
    decrement(policy: GainPolicy): GainValue;
    equals(other: GainValue): boolean;
    isNormalLevel(): boolean;
    isBoostLevel(): boolean;
    toString(): string;
}
export declare enum GainPreset {
    LOW = "LOW",
    NORMAL = "NORMAL",
    HIGH = "HIGH",
    BOOST = "BOOST"
}
export declare class GainPresetService {
    private static readonly presetValues;
    static getPresetValue(preset: GainPreset): GainValue;
    static getAllPresets(): Array<{
        preset: GainPreset;
        value: GainValue;
        description: string;
    }>;
}
export interface GainRepository {
    getCurrentGain(): Promise<GainValue>;
    setGain(gain: GainValue): Promise<void>;
    savePreset(name: string, gain: GainValue): Promise<void>;
    loadPreset(name: string): Promise<GainValue | null>;
}
export interface GainEventPublisher {
    publishGainChanged(oldGain: GainValue, newGain: GainValue): void;
    publishPresetApplied(preset: GainPreset, gain: GainValue): void;
}
export declare class GainController {
    private readonly repository;
    private readonly eventPublisher;
    private readonly policy;
    constructor(repository: GainRepository, eventPublisher: GainEventPublisher, policy?: GainPolicy);
    getCurrentGain(): Promise<GainValue>;
    setGain(targetGain: number): Promise<GainValue>;
    applyPreset(preset: GainPreset): Promise<GainValue>;
    incrementGain(): Promise<GainValue>;
    decrementGain(): Promise<GainValue>;
    saveCurrentAsPreset(name: string): Promise<void>;
    loadNamedPreset(name: string): Promise<GainValue | null>;
}
//# sourceMappingURL=gain-domain.d.ts.map