/recordings:
    get:
        operationId: getRecordings
        summary: Get all recordings
        description: |
            Retrieves a paginated list of all recordings available in the system.
            You can apply filters to narrow down the results based on specific criteria.

            > **Note:** If this endpoint is called using the `recordingTokenCookie` authentication method,
            > the `roomId` filter will be ignored and only recordings associated with the room included in the token will be returned.
        tags:
            - OpenVidu Meet - Recordings
        security:
            - apiKeyInHeader: []
            - accessTokenCookie: []
            - recordingTokenCookie: []
        parameters:
            # - $ref: '../components/parameters/recording-status.yaml'
            - $ref: '../components/parameters/recording-fields.yaml'
            - $ref: '../components/parameters/room-id-query.yaml'
            - $ref: '../components/parameters/max-items.yaml'
            - $ref: '../components/parameters/next-page-token.yaml'
        responses:
            '200':
                $ref: '../components/responses/success-get-recordings.yaml'
            '401':
                $ref: '../components/responses/unauthorized-error.yaml'
            '403':
                $ref: '../components/responses/forbidden-error.yaml'
            '422':
                $ref: '../components/responses/validation-error.yaml'
            '500':
                $ref: '../components/responses/internal-server-error.yaml'

    delete:
        operationId: bulkDeleteRecordings
        summary: Bulk delete recordings
        description: |
            Deletes multiple recordings at once with the specified recording IDs.

            > **Note:** If this endpoint is called using the `recordingTokenCookie` authentication method,
            > all specified recordings must belong to the same room included in the token.
            > If a recording does not belong to that room, it will not be deleted.
        tags:
            - OpenVidu Meet - Recordings
        security:
            - apiKeyInHeader: []
            - accessTokenCookie: []
            - recordingTokenCookie: []
        parameters:
            - $ref: '../components/parameters/recording-ids.yaml'
        responses:
            '200':
                $ref: '../components/responses/success-bulk-delete-recordings.yaml'
            '400':
                $ref: '../components/responses/error-bulk-delete-recordings.yaml'
            '401':
                $ref: '../components/responses/unauthorized-error.yaml'
            '403':
                $ref: '../components/responses/forbidden-error.yaml'
            '422':
                $ref: '../components/responses/validation-error.yaml'
            '500':
                $ref: '../components/responses/internal-server-error.yaml'

/recordings/download:
    get:
        operationId: downloadRecordings
        summary: Download recordings
        description: |
            Downloads multiple recordings as a ZIP file with the specified recording IDs.
            The ZIP file will contain all recordings in MP4 format.

            > **Note:** If this endpoint is called using the `recordingTokenCookie` authentication method,
            > all specified recordings must belong to the same room included in the token.
            > If a recording does not belong to that room, it will not be included in the ZIP file.
        tags:
            - OpenVidu Meet - Recordings
        security:
            - apiKeyInHeader: []
            - accessTokenCookie: []
            - recordingTokenCookie: []
        parameters:
            - $ref: '../components/parameters/recording-ids.yaml'
        responses:
            '200':
                description: Successfully created a ZIP file containing the requested recordings
                headers:
                    Content-Disposition:
                        description: >
                            Indicates that the response is a file download.
                            The filename will be `recordings.zip`.
                        schema:
                            type: string
                            example: attachment; filename="recordings.zip"
                content:
                    application/zip:
                        schema:
                            type: string
                            format: binary
            '400':
                $ref: '../components/responses/error-recordings-not-same-room.yaml'
            '401':
                $ref: '../components/responses/unauthorized-error.yaml'
            '403':
                $ref: '../components/responses/forbidden-error.yaml'
            '422':
                $ref: '../components/responses/validation-error.yaml'
            '500':
                $ref: '../components/responses/internal-server-error.yaml'

/recordings/{recordingId}:
    get:
        operationId: getRecording
        summary: Get a recording
        description: >
            Retrieves the details of a recording with the specified recording ID.
        tags:
            - OpenVidu Meet - Recordings
        security:
            - apiKeyInHeader: []
            - accessTokenCookie: []
            - recordingTokenCookie: []
        parameters:
            - $ref: '../components/parameters/recording-id.yaml'
            - $ref: '../components/parameters/recording-secret.yaml'
        responses:
            '200':
                $ref: '../components/responses/success-get-recording.yaml'
            '400':
                $ref: '../components/responses/error-invalid-recording-secret.yaml'
            '401':
                $ref: '../components/responses/unauthorized-error.yaml'
            '403':
                $ref: '../components/responses/forbidden-error.yaml'
            '404':
                $ref: '../components/responses/error-recording-not-found.yaml'
            '422':
                $ref: '../components/responses/validation-error.yaml'
            '500':
                $ref: '../components/responses/internal-server-error.yaml'
    delete:
        operationId: deleteRecording
        summary: Delete a recording
        description: |
            Deletes a recording with the specified recording ID.

            > ⚠️ **Note:** The recording will only be deleted if it exists and is not in progress
            > (i.e., not in a state such as `active`, `starting`, or `ending`).
        tags:
            - OpenVidu Meet - Recordings
        security:
            - apiKeyInHeader: []
            - accessTokenCookie: []
            - recordingTokenCookie: []
        parameters:
            - $ref: '../components/parameters/recording-id.yaml'
        responses:
            '200':
                $ref: '../components/responses/success-delete-recording.yaml'
            '401':
                $ref: '../components/responses/unauthorized-error.yaml'
            '403':
                $ref: '../components/responses/forbidden-error.yaml'
            '404':
                $ref: '../components/responses/error-recording-not-found.yaml'
            '409':
                $ref: '../components/responses/error-recording-in-progress.yaml'
            '422':
                $ref: '../components/responses/validation-error.yaml'
            '500':
                $ref: '../components/responses/internal-server-error.yaml'
/recordings/{recordingId}/media:
    get:
        operationId: getRecordingMedia
        summary: Get recording media
        description: |
            Retrieves the media of a recording with the specified recording ID.
            The media is returned in a binary format suitable for video playback.

            This endpoint supports range requests, allowing partial content retrieval
            for video playback without downloading the entire file.
        tags:
            - OpenVidu Meet - Recordings
        security:
            - apiKeyInHeader: []
            - accessTokenCookie: []
            - recordingTokenCookie: []
        parameters:
            - $ref: '../components/parameters/recording-id.yaml'
            - $ref: '../components/parameters/recording-secret.yaml'
            - $ref: '../components/parameters/recording-range.yaml'
        responses:
            '200':
                description: Successfully retrieved the full recording media
                headers:
                    Accept-Ranges:
                        $ref: '../components/headers/accept-ranges.yaml'
                    Content-Length:
                        $ref: '../components/headers/content-length.yaml'
                    Cache-Control:
                        $ref: '../components/headers/cache-control.yaml'
                content:
                    video/mp4:
                        schema:
                            type: string
                            format: binary
            '206':
                description: Successfully retrieved a partial range of the recording media
                headers:
                    Accept-Ranges:
                        $ref: '../components/headers/accept-ranges.yaml'
                    Content-Length:
                        $ref: '../components/headers/content-length.yaml'
                    Cache-Control:
                        $ref: '../components/headers/cache-control.yaml'
                    Content-Range:
                        $ref: '../components/headers/content-range.yaml'
                content:
                    video/mp4:
                        schema:
                            type: string
                            format: binary
            '400':
                $ref: '../components/responses/error-invalid-recording-secret.yaml'
            '401':
                $ref: '../components/responses/unauthorized-error.yaml'
            '403':
                $ref: '../components/responses/forbidden-error.yaml'
            '404':
                $ref: '../components/responses/error-recording-not-found.yaml'
            '409':
                $ref: '../components/responses/error-recording-in-progress.yaml'
            '416':
                description: Requested range not satisfiable
                content:
                    application/json:
                        schema:
                            $ref: '../components/schemas/error.yaml'
                        example:
                            error: Recording Error
                            message: 'Recording "room-123--EG_XYZ--XX445" range not satisfiable. File size: 123456789'
            '422':
                $ref: '../components/responses/validation-error.yaml'
            '500':
                $ref: '../components/responses/internal-server-error.yaml'
/recordings/{recordingId}/url:
    get:
        operationId: getRecordingUrl
        summary: Get recording URL
        description: |
            Retrieves the URL of a recording with the specified recording ID.
            This URL is intended to be shared with people who do not have direct access to the recording.

        # It can be configured to be accessible by anyone (public access) or restricted to authenticated users only, 
        # depending on the `privateAccess` query parameter.
        tags:
            - OpenVidu Meet - Recordings
        security:
            - apiKeyInHeader: []
            - accessTokenCookie: []
            - recordingTokenCookie: []
        parameters:
            - $ref: '../components/parameters/recording-id.yaml'
            # - $ref: '../components/parameters/private-access.yaml'
        responses:
            '200':
                $ref: '../components/responses/success-get-recording-url.yaml'
            '401':
                $ref: '../components/responses/unauthorized-error.yaml'
            '403':
                $ref: '../components/responses/forbidden-error.yaml'
            '404':
                $ref: '../components/responses/error-recording-not-found.yaml'
            '422':
                $ref: '../components/responses/validation-error.yaml'
            '500':
                $ref: '../components/responses/internal-server-error.yaml'
