/**
 * Generated by the protoc-gen-ts.  DO NOT EDIT!
 * compiler version: 3.19.1
 * source: google/firestore/admin/v1/index.proto
 * git: https://github.com/thesayyn/protoc-gen-ts */
import * as dependency_1 from "./../../../api/field_behavior";
import * as dependency_2 from "./../../../api/resource";
import * as pb_1 from "google-protobuf";
export class Index extends pb_1.Message {
    #one_of_decls: number[][] = [];
    constructor(data?: any[] | {
        name?: string;
        query_scope?: IndexQueryScope;
        api_scope?: IndexApiScope;
        fields?: IndexIndexField[];
        state?: IndexState;
    }) {
        super();
        pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [3], this.#one_of_decls);
        if (!Array.isArray(data) && typeof data == "object") {
            if ("name" in data && data.name != undefined) {
                this.name = data.name;
            }
            if ("query_scope" in data && data.query_scope != undefined) {
                this.query_scope = data.query_scope;
            }
            if ("api_scope" in data && data.api_scope != undefined) {
                this.api_scope = data.api_scope;
            }
            if ("fields" in data && data.fields != undefined) {
                this.fields = data.fields;
            }
            if ("state" in data && data.state != undefined) {
                this.state = data.state;
            }
        }
    }
    get name() {
        return pb_1.Message.getFieldWithDefault(this, 1, "") as string;
    }
    set name(value: string) {
        pb_1.Message.setField(this, 1, value);
    }
    get query_scope() {
        return pb_1.Message.getFieldWithDefault(this, 2, IndexQueryScope.QUERY_SCOPE_UNSPECIFIED) as IndexQueryScope;
    }
    set query_scope(value: IndexQueryScope) {
        pb_1.Message.setField(this, 2, value);
    }
    get api_scope() {
        return pb_1.Message.getFieldWithDefault(this, 5, IndexApiScope.ANY_API) as IndexApiScope;
    }
    set api_scope(value: IndexApiScope) {
        pb_1.Message.setField(this, 5, value);
    }
    get fields() {
        return pb_1.Message.getRepeatedWrapperField(this, IndexIndexField, 3) as IndexIndexField[];
    }
    set fields(value: IndexIndexField[]) {
        pb_1.Message.setRepeatedWrapperField(this, 3, value);
    }
    get state() {
        return pb_1.Message.getFieldWithDefault(this, 4, IndexState.STATE_UNSPECIFIED) as IndexState;
    }
    set state(value: IndexState) {
        pb_1.Message.setField(this, 4, value);
    }
    static fromObject(data: {
        name?: string;
        query_scope?: IndexQueryScope;
        api_scope?: IndexApiScope;
        fields?: ReturnType<typeof IndexIndexField.prototype.toObject>[];
        state?: IndexState;
    }): Index {
        const message = new Index({});
        if (data.name != null) {
            message.name = data.name;
        }
        if (data.query_scope != null) {
            message.query_scope = data.query_scope;
        }
        if (data.api_scope != null) {
            message.api_scope = data.api_scope;
        }
        if (data.fields != null) {
            message.fields = data.fields.map(item => IndexIndexField.fromObject(item));
        }
        if (data.state != null) {
            message.state = data.state;
        }
        return message;
    }
    toObject() {
        const data: {
            name?: string;
            query_scope?: IndexQueryScope;
            api_scope?: IndexApiScope;
            fields?: ReturnType<typeof IndexIndexField.prototype.toObject>[];
            state?: IndexState;
        } = {};
        if (this.name != null) {
            data.name = this.name;
        }
        if (this.query_scope != null) {
            data.query_scope = this.query_scope;
        }
        if (this.api_scope != null) {
            data.api_scope = this.api_scope;
        }
        if (this.fields != null) {
            data.fields = this.fields.map((item: IndexIndexField) => item.toObject());
        }
        if (this.state != null) {
            data.state = this.state;
        }
        return data;
    }
    serialize(): Uint8Array;
    serialize(w: pb_1.BinaryWriter): void;
    serialize(w?: pb_1.BinaryWriter): Uint8Array | void {
        const writer = w || new pb_1.BinaryWriter();
        if (this.name.length)
            writer.writeString(1, this.name);
        if (this.query_scope != IndexQueryScope.QUERY_SCOPE_UNSPECIFIED)
            writer.writeEnum(2, this.query_scope);
        if (this.api_scope != IndexApiScope.ANY_API)
            writer.writeEnum(5, this.api_scope);
        if (this.fields.length)
            writer.writeRepeatedMessage(3, this.fields, (item: IndexIndexField) => item.serialize(writer));
        if (this.state != IndexState.STATE_UNSPECIFIED)
            writer.writeEnum(4, this.state);
        if (!w)
            return writer.getResultBuffer();
    }
    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): Index {
        const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new Index();
        while (reader.nextField()) {
            if (reader.isEndGroup())
                break;
            switch (reader.getFieldNumber()) {
                case 1:
                    message.name = reader.readString();
                    break;
                case 2:
                    message.query_scope = reader.readEnum();
                    break;
                case 5:
                    message.api_scope = reader.readEnum();
                    break;
                case 3:
                    reader.readMessage(message.fields, () => pb_1.Message.addToRepeatedWrapperField(message, 3, IndexIndexField.deserialize(reader), IndexIndexField));
                    break;
                case 4:
                    message.state = reader.readEnum();
                    break;
                default: reader.skipField();
            }
        }
        return message;
    }
    serializeBinary(): Uint8Array {
        return this.serialize();
    }
    static override deserializeBinary(bytes: Uint8Array): Index {
        return Index.deserialize(bytes);
    }
}
export enum IndexQueryScope {
    QUERY_SCOPE_UNSPECIFIED = 0,
    COLLECTION = 1,
    COLLECTION_GROUP = 2,
    COLLECTION_RECURSIVE = 3
}
export enum IndexApiScope {
    ANY_API = 0,
    DATASTORE_MODE_API = 1
}
export enum IndexState {
    STATE_UNSPECIFIED = 0,
    CREATING = 1,
    READY = 2,
    NEEDS_REPAIR = 3
}
export class IndexIndexField extends pb_1.Message {
    #one_of_decls: number[][] = [[2, 3, 4]];
    constructor(data?: any[] | ({
        field_path?: string;
    } & (({
        order?: IndexIndexFieldOrder;
        array_config?: never;
        vector_config?: never;
    } | {
        order?: never;
        array_config?: IndexIndexFieldArrayConfig;
        vector_config?: never;
    } | {
        order?: never;
        array_config?: never;
        vector_config?: IndexIndexFieldVectorConfig;
    })))) {
        super();
        pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls);
        if (!Array.isArray(data) && typeof data == "object") {
            if ("field_path" in data && data.field_path != undefined) {
                this.field_path = data.field_path;
            }
            if ("order" in data && data.order != undefined) {
                this.order = data.order;
            }
            if ("array_config" in data && data.array_config != undefined) {
                this.array_config = data.array_config;
            }
            if ("vector_config" in data && data.vector_config != undefined) {
                this.vector_config = data.vector_config;
            }
        }
    }
    get field_path() {
        return pb_1.Message.getFieldWithDefault(this, 1, "") as string;
    }
    set field_path(value: string) {
        pb_1.Message.setField(this, 1, value);
    }
    get order() {
        return pb_1.Message.getFieldWithDefault(this, 2, IndexIndexFieldOrder.ORDER_UNSPECIFIED) as IndexIndexFieldOrder;
    }
    set order(value: IndexIndexFieldOrder) {
        pb_1.Message.setOneofField(this, 2, this.#one_of_decls[0], value);
    }
    get has_order() {
        return pb_1.Message.getField(this, 2) != null;
    }
    get array_config() {
        return pb_1.Message.getFieldWithDefault(this, 3, IndexIndexFieldArrayConfig.ARRAY_CONFIG_UNSPECIFIED) as IndexIndexFieldArrayConfig;
    }
    set array_config(value: IndexIndexFieldArrayConfig) {
        pb_1.Message.setOneofField(this, 3, this.#one_of_decls[0], value);
    }
    get has_array_config() {
        return pb_1.Message.getField(this, 3) != null;
    }
    get vector_config() {
        return pb_1.Message.getWrapperField(this, IndexIndexFieldVectorConfig, 4) as IndexIndexFieldVectorConfig;
    }
    set vector_config(value: IndexIndexFieldVectorConfig) {
        pb_1.Message.setOneofWrapperField(this, 4, this.#one_of_decls[0], value);
    }
    get has_vector_config() {
        return pb_1.Message.getField(this, 4) != null;
    }
    get value_mode() {
        const cases: {
            [index: number]: "none" | "order" | "array_config" | "vector_config";
        } = {
            0: "none",
            2: "order",
            3: "array_config",
            4: "vector_config"
        };
        return cases[pb_1.Message.computeOneofCase(this, [2, 3, 4])];
    }
    static fromObject(data: {
        field_path?: string;
        order?: IndexIndexFieldOrder;
        array_config?: IndexIndexFieldArrayConfig;
        vector_config?: ReturnType<typeof IndexIndexFieldVectorConfig.prototype.toObject>;
    }): IndexIndexField {
        const message = new IndexIndexField({});
        if (data.field_path != null) {
            message.field_path = data.field_path;
        }
        if (data.order != null) {
            message.order = data.order;
        }
        if (data.array_config != null) {
            message.array_config = data.array_config;
        }
        if (data.vector_config != null) {
            message.vector_config = IndexIndexFieldVectorConfig.fromObject(data.vector_config);
        }
        return message;
    }
    toObject() {
        const data: {
            field_path?: string;
            order?: IndexIndexFieldOrder;
            array_config?: IndexIndexFieldArrayConfig;
            vector_config?: ReturnType<typeof IndexIndexFieldVectorConfig.prototype.toObject>;
        } = {};
        if (this.field_path != null) {
            data.field_path = this.field_path;
        }
        if (this.order != null) {
            data.order = this.order;
        }
        if (this.array_config != null) {
            data.array_config = this.array_config;
        }
        if (this.vector_config != null) {
            data.vector_config = this.vector_config.toObject();
        }
        return data;
    }
    serialize(): Uint8Array;
    serialize(w: pb_1.BinaryWriter): void;
    serialize(w?: pb_1.BinaryWriter): Uint8Array | void {
        const writer = w || new pb_1.BinaryWriter();
        if (this.field_path.length)
            writer.writeString(1, this.field_path);
        if (this.has_order)
            writer.writeEnum(2, this.order);
        if (this.has_array_config)
            writer.writeEnum(3, this.array_config);
        if (this.has_vector_config)
            writer.writeMessage(4, this.vector_config, () => this.vector_config.serialize(writer));
        if (!w)
            return writer.getResultBuffer();
    }
    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): IndexIndexField {
        const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new IndexIndexField();
        while (reader.nextField()) {
            if (reader.isEndGroup())
                break;
            switch (reader.getFieldNumber()) {
                case 1:
                    message.field_path = reader.readString();
                    break;
                case 2:
                    message.order = reader.readEnum();
                    break;
                case 3:
                    message.array_config = reader.readEnum();
                    break;
                case 4:
                    reader.readMessage(message.vector_config, () => message.vector_config = IndexIndexFieldVectorConfig.deserialize(reader));
                    break;
                default: reader.skipField();
            }
        }
        return message;
    }
    serializeBinary(): Uint8Array {
        return this.serialize();
    }
    static override deserializeBinary(bytes: Uint8Array): IndexIndexField {
        return IndexIndexField.deserialize(bytes);
    }
}
export enum IndexIndexFieldOrder {
    ORDER_UNSPECIFIED = 0,
    ASCENDING = 1,
    DESCENDING = 2
}
export enum IndexIndexFieldArrayConfig {
    ARRAY_CONFIG_UNSPECIFIED = 0,
    CONTAINS = 1
}
export class IndexIndexFieldVectorConfig extends pb_1.Message {
    #one_of_decls: number[][] = [[2]];
    constructor(data?: any[] | ({
        dimension?: number;
    } & (({
        flat?: IndexIndexFieldVectorConfigFlatIndex;
    })))) {
        super();
        pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls);
        if (!Array.isArray(data) && typeof data == "object") {
            if ("dimension" in data && data.dimension != undefined) {
                this.dimension = data.dimension;
            }
            if ("flat" in data && data.flat != undefined) {
                this.flat = data.flat;
            }
        }
    }
    get dimension() {
        return pb_1.Message.getFieldWithDefault(this, 1, 0) as number;
    }
    set dimension(value: number) {
        pb_1.Message.setField(this, 1, value);
    }
    get flat() {
        return pb_1.Message.getWrapperField(this, IndexIndexFieldVectorConfigFlatIndex, 2) as IndexIndexFieldVectorConfigFlatIndex;
    }
    set flat(value: IndexIndexFieldVectorConfigFlatIndex) {
        pb_1.Message.setOneofWrapperField(this, 2, this.#one_of_decls[0], value);
    }
    get has_flat() {
        return pb_1.Message.getField(this, 2) != null;
    }
    get type() {
        const cases: {
            [index: number]: "none" | "flat";
        } = {
            0: "none",
            2: "flat"
        };
        return cases[pb_1.Message.computeOneofCase(this, [2])];
    }
    static fromObject(data: {
        dimension?: number;
        flat?: ReturnType<typeof IndexIndexFieldVectorConfigFlatIndex.prototype.toObject>;
    }): IndexIndexFieldVectorConfig {
        const message = new IndexIndexFieldVectorConfig({});
        if (data.dimension != null) {
            message.dimension = data.dimension;
        }
        if (data.flat != null) {
            message.flat = IndexIndexFieldVectorConfigFlatIndex.fromObject(data.flat);
        }
        return message;
    }
    toObject() {
        const data: {
            dimension?: number;
            flat?: ReturnType<typeof IndexIndexFieldVectorConfigFlatIndex.prototype.toObject>;
        } = {};
        if (this.dimension != null) {
            data.dimension = this.dimension;
        }
        if (this.flat != null) {
            data.flat = this.flat.toObject();
        }
        return data;
    }
    serialize(): Uint8Array;
    serialize(w: pb_1.BinaryWriter): void;
    serialize(w?: pb_1.BinaryWriter): Uint8Array | void {
        const writer = w || new pb_1.BinaryWriter();
        if (this.dimension != 0)
            writer.writeInt32(1, this.dimension);
        if (this.has_flat)
            writer.writeMessage(2, this.flat, () => this.flat.serialize(writer));
        if (!w)
            return writer.getResultBuffer();
    }
    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): IndexIndexFieldVectorConfig {
        const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new IndexIndexFieldVectorConfig();
        while (reader.nextField()) {
            if (reader.isEndGroup())
                break;
            switch (reader.getFieldNumber()) {
                case 1:
                    message.dimension = reader.readInt32();
                    break;
                case 2:
                    reader.readMessage(message.flat, () => message.flat = IndexIndexFieldVectorConfigFlatIndex.deserialize(reader));
                    break;
                default: reader.skipField();
            }
        }
        return message;
    }
    serializeBinary(): Uint8Array {
        return this.serialize();
    }
    static override deserializeBinary(bytes: Uint8Array): IndexIndexFieldVectorConfig {
        return IndexIndexFieldVectorConfig.deserialize(bytes);
    }
}
export class IndexIndexFieldVectorConfigFlatIndex extends pb_1.Message {
    #one_of_decls: number[][] = [];
    constructor(data?: any[] | {}) {
        super();
        pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls);
        if (!Array.isArray(data) && typeof data == "object") { }
    }
    static fromObject(data: {}): IndexIndexFieldVectorConfigFlatIndex {
        const message = new IndexIndexFieldVectorConfigFlatIndex({});
        return message;
    }
    toObject() {
        const data: {} = {};
        return data;
    }
    serialize(): Uint8Array;
    serialize(w: pb_1.BinaryWriter): void;
    serialize(w?: pb_1.BinaryWriter): Uint8Array | void {
        const writer = w || new pb_1.BinaryWriter();
        if (!w)
            return writer.getResultBuffer();
    }
    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): IndexIndexFieldVectorConfigFlatIndex {
        const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new IndexIndexFieldVectorConfigFlatIndex();
        while (reader.nextField()) {
            if (reader.isEndGroup())
                break;
            switch (reader.getFieldNumber()) {
                default: reader.skipField();
            }
        }
        return message;
    }
    serializeBinary(): Uint8Array {
        return this.serialize();
    }
    static override deserializeBinary(bytes: Uint8Array): IndexIndexFieldVectorConfigFlatIndex {
        return IndexIndexFieldVectorConfigFlatIndex.deserialize(bytes);
    }
}
