import type { NobjcObject } from "objc-js";
import type { _NSArray } from "../Foundation/NSArray.js";
import type { _NSError } from "../Foundation/NSError.js";
import type { _NSObject } from "../Foundation/NSObject.js";
import type { _MPMediaItem } from "./MPMediaItem.js";
import type { _MPMediaItemCollection } from "./MPMediaItemCollection.js";
import type { _MPMediaPlayback } from "./MPMediaPlayback.js";
import type { _MPMediaQuery } from "./MPMediaQuery.js";
import type { _MPMusicPlayerApplicationController } from "./MPMusicPlayerApplicationController.js";
import type { _MPMusicPlayerQueueDescriptor } from "./MPMusicPlayerQueueDescriptor.js";
import type { MPMusicPlaybackState } from "./MPMusicPlaybackState.js";
import type { MPMusicRepeatMode } from "./MPMusicRepeatMode.js";
import type { MPMusicShuffleMode } from "./MPMusicShuffleMode.js";
export declare class _MPMusicPlayerController extends _NSObject {
    static alloc(): _MPMusicPlayerController;
    static new(): _MPMusicPlayerController;
    init(): _MPMusicPlayerController;
    /**
     * Playing items with applicationMusicPlayer does not affect Music's playback state.
     */
    static applicationMusicPlayer(): _MPMusicPlayerController;
    /** Similar to applicationMusicPlayer, but allows direct manipulation of the queue. */
    static applicationQueuePlayer(): _MPMusicPlayerApplicationController;
    /**
     * Playing media items with the systemMusicPlayer will replace the user's current Music state.
     */
    static systemMusicPlayer(): _MPMusicPlayerController;
    static iPodMusicPlayer(): NobjcObject;
    /**
     * Call -play to begin playback after setting an item queue source. Setting a query will implicitly use MPMediaGroupingTitle.
     */
    setQueueWithQuery$(query: _MPMediaQuery): void;
    setQueueWithItemCollection$(itemCollection: _MPMediaItemCollection): void;
    setQueueWithStoreIDs$(storeIDs: _NSArray): void;
    setQueueWithDescriptor$(descriptor: _MPMusicPlayerQueueDescriptor): void;
    /** Inserts the contents of the queue descriptor after the now playing item */
    prependQueueDescriptor$(descriptor: _MPMusicPlayerQueueDescriptor): void;
    /** Adds the contents of the queue descriptor to the end of the queue */
    appendQueueDescriptor$(descriptor: _MPMusicPlayerQueueDescriptor): void;
    /**
     * The completion handler will be called when the first item from the queue is buffered and ready to play. If a first item has been specified using MPMusicPlayerQueueDescriptor, the error will be non-nil if the specified item cannot be prepared for playback. If a first item is not specified, the error will be non-nil if an item cannot be prepared for playback. Errors will be in MPErrorDomain.
     */
    prepareToPlayWithCompletionHandler$(completionHandler: ((error: _NSError) => void) | null): void;
    /**
     * Skips to the next item in the queue. If already at the last item, this resets the queue to the first item in a paused playback state.
     */
    skipToNextItem(): void;
    /** Restarts playback at the beginning of the currently playing media item. */
    skipToBeginning(): void;
    /**
     * Skips to the previous item in the queue. If already at the first item, this will end playback.
     */
    skipToPreviousItem(): void;
    /**
     * These methods determine whether playback notifications will be generated. Calls to begin/endGeneratingPlaybackNotifications are nestable.
     */
    beginGeneratingPlaybackNotifications(): void;
    endGeneratingPlaybackNotifications(): void;
    /** Returns the current playback state of the music player */
    playbackState(): MPMusicPlaybackState;
    /**
     * Determines how music repeats after playback completes. Defaults to MPMusicRepeatModeDefault.
     */
    repeatMode(): MPMusicRepeatMode;
    setRepeatMode$(value: MPMusicRepeatMode): void;
    /**
     * Determines how music is shuffled when playing. Defaults to MPMusicShuffleModeDefault.
     */
    shuffleMode(): MPMusicShuffleMode;
    setShuffleMode$(value: MPMusicShuffleMode): void;
    /**
     * The current volume of playing music, in the range of 0.0 to 1.0. This property is deprecated -- use MPVolumeView for volume control instead.
     */
    volume(): number;
    setVolume$(value: number): void;
    /**
     * Returns the currently playing media item, or nil if none is playing. Setting the nowPlayingItem to an item in the current queue will begin playback at that item.
     */
    nowPlayingItem(): _MPMediaItem | null;
    setNowPlayingItem$(value: _MPMediaItem | null): void;
    /**
     * Returns the index of the now playing item in the current playback queue. May return NSNotFound if the index is not valid (e.g. an empty queue or an infinite playlist).
     */
    indexOfNowPlayingItem(): number;
}
export interface _MPMusicPlayerController extends _MPMediaPlayback {
}
