import CultureInfo from "../../culture-info";
import { ICultureSensitiveDirtyTracking } from "../dirty-tracking/dirty-tracking";
import { PropertyDataType, PropertyValue, PropertyValuePerCulture, TypeInfo } from "./data-type";
import { IProperty, PropertyBase } from "./property";
export interface ICultureSensitiveProperty<T extends PropertyDataType | unknown = PropertyDataType, B extends boolean = boolean> extends IProperty, ICultureSensitiveDirtyTracking {
    /**
     * Gets the value for a specific culture.
     * @param culture - The culture for which to get the value
     * @returns The value or null.
     */
    getValue(culture: CultureInfo): PropertyValue<T, B>;
    /**
     * Gets all values for the specified cultures
     * @param cultures - The cultures to get the values for
     * @returns The values per culture. A value can be null for a certain culture.
     */
    getValues(cultures?: Array<CultureInfo>): PropertyValuePerCulture<T, B>;
    /**
     * Gets all cultures that the property supports.
     * These are always equal to the cultures the {@link IEntity} was loaded with.
     * @returns List of cultures.
     */
    getCultures(): Array<CultureInfo>;
    /**
     * Sets a value for a specific culture.
     * @param culture - The culture for which to set the value
     * @param value - The value
     */
    setValue(culture: CultureInfo, value: PropertyValue<T, B>): void;
}
export declare class CultureSensitiveProperty<T extends PropertyDataType | unknown, B extends boolean> extends PropertyBase<T, B> implements ICultureSensitiveProperty<T, B> {
    private readonly _loadedCultures;
    private readonly _values;
    private _dirtyValueCalculators;
    readonly isMultiLanguage: true;
    isTracking: boolean;
    get isDirty(): boolean;
    constructor(name: string, typeInfo: TypeInfo<T, B>, loadedCultures: Array<CultureInfo>, values?: PropertyValuePerCulture<T, B>, hasDataSource?: boolean);
    getTypeName(): string;
    getValue(culture: CultureInfo): PropertyValue<T, B>;
    getValues(cultures?: Array<CultureInfo>): PropertyValuePerCulture<T, B>;
    getCultures(): Array<CultureInfo>;
    setValue(culture: CultureInfo, value: PropertyValue<T, B>): void;
    startTracking(): void;
    markClean(): void;
    getDirtyCultures(): Array<CultureInfo>;
    private cultureMustBeLoaded;
    private culturesMustBeLoaded;
}
