version: v1-draft
exports:
    nd_scrobbler_is_authorized:
        description: IsAuthorized checks if a user is authorized to scrobble to this service.
        input:
            $ref: '#/components/schemas/IsAuthorizedRequest'
            contentType: application/json
        output:
            type: boolean
            contentType: application/json
    nd_scrobbler_now_playing:
        description: NowPlaying sends a now playing notification to the scrobbling service.
        input:
            $ref: '#/components/schemas/NowPlayingRequest'
            contentType: application/json
    nd_scrobbler_scrobble:
        description: Scrobble submits a completed scrobble to the scrobbling service.
        input:
            $ref: '#/components/schemas/ScrobbleRequest'
            contentType: application/json
components:
    schemas:
        ArtistRef:
            description: ArtistRef is a reference to an artist with name and optional MBID.
            properties:
                id:
                    type: string
                    description: ID is the internal Navidrome artist ID (if known).
                name:
                    type: string
                    description: Name is the artist name.
                mbid:
                    type: string
                    description: MBID is the MusicBrainz ID for the artist.
            required:
                - name
        IsAuthorizedRequest:
            description: IsAuthorizedRequest is the request for authorization check.
            properties:
                username:
                    type: string
                    description: Username is the username of the user.
            required:
                - username
        NowPlayingRequest:
            description: NowPlayingRequest is the request for now playing notification.
            properties:
                username:
                    type: string
                    description: Username is the username of the user.
                track:
                    $ref: '#/components/schemas/TrackInfo'
                    description: Track is the track currently playing.
                position:
                    type: integer
                    format: int32
                    description: Position is the current playback position in seconds.
            required:
                - username
                - track
                - position
        ScrobbleRequest:
            description: ScrobbleRequest is the request for submitting a scrobble.
            properties:
                username:
                    type: string
                    description: Username is the username of the user.
                track:
                    $ref: '#/components/schemas/TrackInfo'
                    description: Track is the track that was played.
                timestamp:
                    type: integer
                    format: int64
                    description: Timestamp is the Unix timestamp when the track started playing.
            required:
                - username
                - track
                - timestamp
        TrackInfo:
            description: TrackInfo contains track metadata.
            properties:
                id:
                    type: string
                    description: ID is the internal Navidrome track ID.
                title:
                    type: string
                    description: Title is the track title.
                album:
                    type: string
                    description: Album is the album name.
                artist:
                    type: string
                    description: Artist is the formatted artist name for display (e.g., "Artist1 • Artist2").
                albumArtist:
                    type: string
                    description: AlbumArtist is the formatted album artist name for display.
                artists:
                    type: array
                    description: Artists is the list of track artists.
                    items:
                        $ref: '#/components/schemas/ArtistRef'
                albumArtists:
                    type: array
                    description: AlbumArtists is the list of album artists.
                    items:
                        $ref: '#/components/schemas/ArtistRef'
                duration:
                    type: number
                    format: float
                    description: Duration is the track duration in seconds.
                trackNumber:
                    type: integer
                    format: int32
                    description: TrackNumber is the track number on the album.
                discNumber:
                    type: integer
                    format: int32
                    description: DiscNumber is the disc number.
                mbzRecordingId:
                    type: string
                    description: MBZRecordingID is the MusicBrainz recording ID.
                mbzAlbumId:
                    type: string
                    description: MBZAlbumID is the MusicBrainz album/release ID.
                mbzReleaseGroupId:
                    type: string
                    description: MBZReleaseGroupID is the MusicBrainz release group ID.
                mbzReleaseTrackId:
                    type: string
                    description: MBZReleaseTrackID is the MusicBrainz release track ID.
                path:
                    type: string
                    description: |-
                        Path is the full path to the track file, relative to the library root.
                        Only included if the plugin has library permission with filesystem access for the track's library.
            required:
                - id
                - title
                - album
                - artist
                - albumArtist
                - artists
                - albumArtists
                - duration
                - trackNumber
                - discNumber
