/// <reference types="mongoose/types/aggregate" />
/// <reference types="mongoose/types/callback" />
/// <reference types="mongoose/types/collection" />
/// <reference types="mongoose/types/connection" />
/// <reference types="mongoose/types/cursor" />
/// <reference types="mongoose/types/document" />
/// <reference types="mongoose/types/error" />
/// <reference types="mongoose/types/expressions" />
/// <reference types="mongoose/types/helpers" />
/// <reference types="mongoose/types/middlewares" />
/// <reference types="mongoose/types/indexes" />
/// <reference types="mongoose/types/models" />
/// <reference types="mongoose/types/mongooseoptions" />
/// <reference types="mongoose/types/pipelinestage" />
/// <reference types="mongoose/types/populate" />
/// <reference types="mongoose/types/query" />
/// <reference types="mongoose/types/schemaoptions" />
/// <reference types="mongoose/types/schematypes" />
/// <reference types="mongoose/types/session" />
/// <reference types="mongoose/types/types" />
/// <reference types="mongoose/types/utility" />
/// <reference types="mongoose/types/validation" />
/// <reference types="mongoose/types/virtuals" />
/// <reference types="mongoose/types/inferschematype" />
/// <reference types="mongoose/types/inferrawdoctype" />
import mongoose from 'mongoose';
export interface AutoIncrementOptionsSimple {
    /** Which Field to increment on save */
    field: string;
    /**
     * How much to increment the field by
     * @default 1
     */
    incrementBy?: number | bigint;
}
export type AutoIncrementSimplePluginOptions = AutoIncrementOptionsSimple | AutoIncrementOptionsSimple[];
export interface AutoIncrementIDOptions {
    /**
     * How much to increment the field by
     * @default 1
     */
    incrementBy?: number | bigint;
    /**
     * Set the field to increment
     * -> Only use this if it is not "_id"
     * @default _id
     */
    field?: string;
    /**
     * The Tracker Collection to use to keep track of an counter for the ID
     * @default identitycounters
     */
    trackerCollection?: string;
    /**
     * Set the tracker model name
     * @default identitycounter
     */
    trackerModelName?: string;
    /**
     * the count should start at
     * @default 0
     */
    startAt?: number | bigint;
    /**
     * Overwrite what to use for the `modelName` property in the tracker document
     * This can be overwritten when wanting to use a single tracker for multiple models
     * Defaults to `document.constructor.modelName`
     */
    overwriteModelName?: string | OverwriteModelNameFunction;
}
/**
 * A function to generate the name used for the auto-increment "modelName" field
 */
export type OverwriteModelNameFunction = (modelName: string, model: mongoose.Model<any>) => string;
export interface AutoIncrementIDTrackerSpec {
    /** The ModelName from the current model */
    modelName: string;
    /** The field in the schema */
    field: string;
    /** Current Tracker count */
    count: bigint;
}
