import * as firestore from "firebase-admin/firestore";
import { DocumentModel } from "../exntensions/firestore.extension";
/**
 * The source of ModelFieldValue.
 *
 * ModelFieldValueのソース。
 */
export type ModelFieldValueSource = "user" | "server";
/**
 * DynamicMap interface.
 *
 * DynamicMapのインターフェース。
 */
export type DynamicMap = {
    [key: string]: any;
};
/**
 * DynamicList interface.
 *
 * DynamicListのインターフェース。
 */
export type DynamicList = any[];
/**
 * ModelWhere interface.
 *
 * ModelWhereのインターフェース。
 */
export type ModelFieldValueWhere = {
    [field: string]: any;
} | undefined;
/**
 * ModelCondition interface.
 *
 * ModelConditionのインターフェース。
 */
export type ModelFieldValueCondition = {
    [field: string]: any;
} | undefined;
/**
 * Class for generating values for `ModelFieldValue` in katana_model.
 *
 * katana_modelの`ModelFieldValue`用の値を生成するためのクラス。
 */
export declare class ModelFieldValue {
    constructor(type: string, source?: ModelFieldValueSource);
    "@type": string;
    "@source": ModelFieldValueSource;
}
/**
 * ModelServerCommandBase interface.
 *
 * katana_modelの`ModelServerCommandBase`用のインターフェース。
 */
export declare class ModelServerCommandBase extends ModelFieldValue {
    constructor({ command, publicParameters, privateParameters, source }: {
        command: string;
        publicParameters: {
            [field: string]: any;
        };
        privateParameters: {
            [field: string]: any;
        };
        source?: ModelFieldValueSource;
    });
    "@command": string;
    "@public": {
        [field: string]: any;
    };
    "@private": {
        [field: string]: any;
    };
    /**
     * Get the value of the command.
     *
     * コマンドの値を取得します。
     *
     * @returns The value of the command.
     */
    value(): string;
}
/**
 * ModelCounter interface.
 *
 * katana_modelの`ModelCounter`用のインターフェース。
 */
export declare class ModelCounter extends ModelFieldValue {
    constructor(value: number, increment?: number, source?: ModelFieldValueSource);
    "@increment": number;
    "@value": number;
    /**
     * Get the value of the counter.
     *
     * カウンターの値を取得します。
     *
     * @returns The value of the counter.
     */
    value(): number;
}
/**
 * ModelTimestamp interface.
 *
 * katana_modelの`ModelTimestamp`用のインターフェース。
 */
export declare class ModelTimestamp extends ModelFieldValue {
    constructor(time?: Date, source?: ModelFieldValueSource);
    "@time": number;
    /**
     * Get the value of the timestamp.
     *
     * タイムスタンプの値を取得します。
     *
     * @returns
     */
    value(): Date;
}
/**
 * ModelDate interface.
 *
 * katana_modelの`ModelDate`用のインターフェース。
 */
export declare class ModelDate extends ModelFieldValue {
    constructor(date?: Date, source?: ModelFieldValueSource);
    "@time": number;
    /**
     * Get the value of the timestamp.
     *
     * タイムスタンプの値を取得します。
     *
     * @returns
     */
    value(): Date;
}
/**
 * ModelTime interface.
 *
 * katana_modelの`ModelTime`用のインターフェース。
 */
export declare class ModelTime extends ModelFieldValue {
    constructor(time?: Date, source?: ModelFieldValueSource);
    "@time": number;
    /**
     * Get the value of the timestamp.
     *
     * タイムスタンプの値を取得します。
     *
     * @returns
     */
    value(): Date;
}
/**
 * ModelTimestampRange interface.
 *
 * katana_modelの`ModelTimestampRange`用のインターフェース。
 */
export declare class ModelTimestampRange extends ModelFieldValue {
    constructor(start?: Date, end?: Date, source?: ModelFieldValueSource);
    "@start": number;
    "@end": number;
    /**
     * Get the value of the timestamp.
     *
     * タイムスタンプの値を取得します。
     *
     * @returns
     */
    value(): {
        start: Date;
        end: Date;
    };
}
/**
 * ModelDateRange interface.
 *
 * katana_modelの`ModelDateRange`用のインターフェース。
 */
export declare class ModelDateRange extends ModelFieldValue {
    constructor(start?: Date, end?: Date, source?: ModelFieldValueSource);
    "@start": number;
    "@end": number;
    /**
     * Get the value of the timestamp.
     *
     * タイムスタンプの値を取得します。
     *
     * @returns
     */
    value(): {
        start: Date;
        end: Date;
    };
}
/**
 * ModelTimeRange interface.
 *
 * katana_modelの`ModelTimeRange`用のインターフェース。
 */
export declare class ModelTimeRange extends ModelFieldValue {
    constructor(start?: Date, end?: Date, source?: ModelFieldValueSource);
    "@start": number;
    "@end": number;
    /**
     * Get the value of the timestamp.
     *
     * タイムスタンプの値を取得します。
     *
     * @returns
     */
    value(): {
        start: Date;
        end: Date;
    };
}
/**
 * ModelLocale interface.
 *
 * katana_modelの`ModelLocale`用のインターフェース。
 */
export declare class ModelLocale extends ModelFieldValue {
    constructor(language: string, country?: string, source?: ModelFieldValueSource);
    "@language": string;
    "@country"?: string;
    /**
     * Get the value of the locale.
     *
     * ロケールの値を取得します。
     *
     * @returns The value of the locale.
     */
    value(): string;
}
/**
 * ModelLocalizedValue interface.
 *
 * katana_modelの`ModelLocalizedValue`用のインターフェース。
 */
export declare class ModelLocalizedValue extends ModelFieldValue {
    constructor(localized: ModelLocalizedLocaleVaue[], source?: ModelFieldValueSource);
    "@localized": ModelLocalizedLocaleVaue[];
    /**
     * Get the value of the localized value.
     *
     * ローカライズされた値の値を取得します。
     *
     * @returns The value of the localized value.
     */
    value(): ModelLocalizedLocaleVaue[];
    /**
     * Get the value of the localized value for the specified locale.
     *
     * 指定されたロケールのローカライズされた値の値を取得します。
     *
     * @param locale The locale to get the value for.
     * @returns The value of the localized value for the specified locale.
     */
    get(locale: string): ModelLocalizedLocaleVaue | null;
}
/**
 * The value of ModelLocalizedValue.
 *
 * ModelLocalizedValueの値。
 */
export declare class ModelLocalizedLocaleVaue {
    constructor({ language, country, value }: {
        language: string;
        country?: string;
        value: string | number | boolean | {
            [field: string]: any;
        } | string[] | number[] | boolean[];
    });
    language: string;
    country?: string;
    value: string | number | boolean | {
        [field: string]: any;
    } | string[] | number[] | boolean[];
}
/**
 * ModelUri interface.
 *
 * katana_modelの`ModelUri`用のインターフェース。
 */
export declare class ModelUri extends ModelFieldValue {
    constructor(uri: string, source?: ModelFieldValueSource);
    "@uri": string;
    /**
     * Get the value of the uri.
     *
     * URIの値を取得します。
     *
     * @returns The value of the uri.
     */
    value(): string;
}
/**
 * ModelImageUri interface.
 *
 * katana_modelの`ModelImageUri`用のインターフェース。
 */
export declare class ModelImageUri extends ModelFieldValue {
    constructor(uri: string, source?: ModelFieldValueSource);
    "@uri": string;
    /**
     * Get the value of the uri.
     *
     * URIの値を取得します。
     *
     * @returns The value of the uri.
     */
    value(): string;
}
/**
 * ModelVideoUri interface.
 *
 * katana_modelの`ModelVideoUri`用のインターフェース。
 */
export declare class ModelVideoUri extends ModelFieldValue {
    constructor(uri: string, source?: ModelFieldValueSource);
    "@uri": string;
    /**
     * Get the value of the uri.
     *
     * URIの値を取得します。
     *
     * @returns The value of the uri.
     */
    value(): string;
}
/**
 * ModelSearch interface.
 *
 * katana_modelの`ModelSearch`用のインターフェース。
 */
export declare class ModelSearch extends ModelFieldValue {
    constructor(list: string[], source?: ModelFieldValueSource);
    "@list": string[];
    /**
     * Get the value of the search.
     *
     * 検索の値を取得します。
     *
     * @returns The value of the search.
     */
    value(): string[];
}
/**
 * ModelToken interface.
 *
 * katana_modelの`ModelToken`用のインターフェース。
 */
export declare class ModelToken extends ModelFieldValue {
    constructor(list: string[], source?: ModelFieldValueSource);
    "@list": string[];
    /**
     * Get the value of the token.
     *
     * トークンの値を取得します。
     *
     * @returns The value of the token.
     */
    value(): string[];
}
/**
 * ModelGeoValue interface.
 *
 * katana_modelの`ModelGeoValue`用のインターフェース。
 */
export declare class ModelGeoValue extends ModelFieldValue {
    constructor(latitude: number, longitude: number, source?: ModelFieldValueSource);
    "@latitude": number;
    "@longitude": number;
    "@radiusKm"?: number | undefined;
    /**
     * Get the value of the geo value.
     *
     * 地理値の値を取得します。
     *
     * @returns The value of the geo value.
     */
    value(): {
        latitude: number;
        longitude: number;
    };
    /**
     * Get the geo hash of the geo value.
     *
     * 地理値のGeoHashを取得します。
     *
     * @returns The geo hash of the geo value.
     */
    geoHash(): string;
}
/**
 * ModelVectorValue interface.
 *
 * katana_modelの`ModelVectorValue`用のインターフェース。
 */
export declare class ModelVectorValue extends ModelFieldValue {
    constructor(vector: number[], source?: ModelFieldValueSource);
    "@vector": number[];
    /**
     * Get the value of the vector value.
     *
     * ベクトル値の値を取得します。
     *
     * @returns The value of the vector value.
     */
    value(): number[];
}
/**
 * ModelRefBase interface.
 *
 * katana_modelの`ModelRefBase`用のインターフェース。
 */
export declare class ModelRefBase extends ModelFieldValue {
    constructor(ref: string, doc?: firestore.DocumentReference | undefined, source?: ModelFieldValueSource);
    "@ref": string;
    "@doc": firestore.DocumentReference | undefined;
    /**
     * Get the value of the ref.
     *
     * リファレンスの値を取得します。
     *
     * @returns The value of the ref.
     */
    value(): string;
    /**
     * Load the document.
     *
     * ドキュメントを読み込みます。
     *
     * @returns The value of the ref.
     */
    load(): Promise<DocumentModel<firestore.DocumentData, firestore.DocumentData>>;
    /**
     * Save the document.
     *
     * ドキュメントを保存します。
     *
     * @param data The data to save.
     * @param options The options to save.
     * @returns The value of the ref.
     */
    save(data: firestore.PartialWithFieldValue<firestore.DocumentData>, options: firestore.SetOptions): Promise<void>;
    /**
     * Delete the document.
     *
     * ドキュメントを削除します。
     *
     * @returns The value of the ref.
     */
    delete(): Promise<void>;
    /**
     * Get the id of the ref.
     *
     * リファレンスのIDを取得します。
     *
     * @returns The id of the ref.
     */
    get id(): string;
    /**
     * Get the ref of the document.
     *
     * ドキュメントのリファレンスを取得します。
     *
     * @returns The ref of the document.
     */
    get ref(): firestore.DocumentReference | undefined;
}
