import { Track } from "./Player";
import { Synthra } from "./Manager";
/**
 * The player's queue, the `current` property is the currently playing track, think of the rest as the up-coming tracks.
 */
export declare class Queue extends Array<Track> {
    /**
     * The total duration of the queue in milliseconds.
     * This includes the duration of the currently playing track.
     */
    get duration(): number;
    /**
     * The total size of tracks in the queue including the current track.
     * This includes the current track if it is not null.
     * @returns The total size of tracks in the queue including the current track.
     */
    get totalSize(): number;
    /**
     * The size of tracks in the queue.
     * This does not include the currently playing track.
     * @returns The size of tracks in the queue.
     */
    get size(): number;
    /** The current track */
    current: Track | null;
    /** The previous tracks */
    previous: Track[];
    /** The Manager instance. */
    manager: Synthra;
    /** The guild ID property. */
    guildId: string;
    /**
     * Constructs a new Queue.
     * @param guildId The guild ID.
     * @param manager The Manager instance.
     */
    constructor(guildId: string, manager: Synthra);
    /**
     * Adds a track to the queue.
     * @param track The track or tracks to add. Can be a single `Track` or an array of `Track`s.
     * @param [offset=null] The position to add the track(s) at. If not provided, the track(s) will be added at the end of the queue.
     */
    add(track: Track | Track[], offset?: number): void;
    /**
     * Removes track(s) from the queue.
     * @param startOrPosition If a single number is provided, it will be treated as the position of the track to remove.
     *                         If two numbers are provided, they will be used as the start and end of a range of tracks to remove.
     * @param end Optional, end of the range of tracks to remove.
     * @returns The removed track(s).
     */
    remove(position?: number): Track[];
    remove(start: number, end: number): Track[];
    /**
     * Clears the queue.
     * This will remove all tracks from the queue and emit a state update event.
     */
    clear(): void;
    /**
     * Shuffles the queue.
     * This will randomize the order of the tracks in the queue and emit a state update event.
     */
    shuffle(): void;
    /**
     * Shuffles the queue to play tracks requested by each user one block at a time.
     */
    userBlockShuffle(): void;
    /**
     * Shuffles the queue to play tracks requested by each user one by one.
     */
    roundRobinShuffle(): void;
}
