"/info/account/{field}/{value}":
    parameters:
        - in: path
          name: field
          required: true
          schema:
              type: string
              enum: [username, userSessionId]
          description: Lookup field — either `username` or `userSessionId`.
        - in: path
          name: value
          required: true
          schema: { type: string }
    get:
        tags: [Info]
        operationId: findPublicAccountData
        summary: Public account lookup
        description: |
            Returns the public-facing snapshot of an account by `username`
            or `userSessionId`. Used by the VR app to resolve handles into
            display data without needing the full admin profile. Bearer
            key only — no access token required.
        security:
            - apiKey: []
        responses:
            "200":
                description: Public account data.
                content:
                    application/json:
                        schema: { $ref: "../components/schemas/PublicAccountData.yaml" }
            "401": { $ref: "../public-api.yaml#/components/responses/Unauthorized" }
            "404": { $ref: "../public-api.yaml#/components/responses/NotFound" }
            "422":
                description: "`field` is not one of `username` / `userSessionId`."
                content:
                    application/json:
                        schema: { $ref: "../public-api.yaml#/components/schemas/Error" }

"/info/username/{username}":
    parameters:
        - in: path
          name: username
          required: true
          schema: { type: string }
    get:
        tags: [Info]
        operationId: checkUsername
        summary: Username availability + validity
        description: |
            Returns `200` when the username is well-formed AND not currently
            taken. Used by the sign-up form for live validation.
        responses:
            "200":
                description: Available.
            "401": { $ref: "../public-api.yaml#/components/responses/Unauthorized" }
            "422":
                description: |
                    Username is malformed (length / character class /
                    banned word) or already taken. The response body is
                    the validator's failure record or a `{ msg }` payload
                    — clients should not depend on a specific shape.
                content:
                    application/json:
                        schema:
                            type: object
                            additionalProperties: true

"/info/room/{roomId}/sanitize":
    parameters:
        - in: path
          name: roomId
          required: true
          schema: { type: string }
    put:
        tags: [Info]
        operationId: sanitizeRoomData
        summary: Sanitize room input
        description: |
            Applies the banned-words / NSFW filters to room metadata
            (title, description, etc.). Returns the cleaned shape — the
            client uses this before publishing a room.
        requestBody:
            required: true
            content:
                application/json:
                    schema:
                        type: object
                        description: Free-form room data — title, description, tags, etc.
                        additionalProperties: true
        responses:
            "200":
                description: Sanitized room data.
                content:
                    application/json:
                        schema:
                            type: object
                            additionalProperties: true
            "401": { $ref: "../public-api.yaml#/components/responses/Unauthorized" }

"/info/room/{roomId}/sentiment":
    parameters:
        - in: path
          name: roomId
          required: true
          schema: { type: string }
    put:
        tags: [Info]
        operationId: getSentimentForRoomData
        summary: Sentiment score for room input
        description: Returns a sentiment score for the supplied room metadata.
        requestBody:
            required: true
            content:
                application/json:
                    schema:
                        type: object
                        additionalProperties: true
        responses:
            "200":
                description: Sentiment score.
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                score: { type: number, format: float }
                                label: { type: string, description: "e.g. `positive`, `neutral`, `negative`." }
                            additionalProperties: true
            "401": { $ref: "../public-api.yaml#/components/responses/Unauthorized" }

"/info/timestamp":
    get:
        tags: [Info]
        operationId: getServerTimestamp
        summary: Server timestamp
        description: |
            Returns the server's current Unix-millisecond timestamp in the
            `x-timestamp` response header. The body is the literal string
            `OK`.
        responses:
            "200":
                description: Timestamp emitted in the `x-timestamp` response header.
                headers:
                    x-timestamp:
                        description: Server Unix-millisecond timestamp.
                        schema: { type: string }
                content:
                    text/plain:
                        schema: { type: string, example: OK }
            "401": { $ref: "../public-api.yaml#/components/responses/Unauthorized" }

"/info/region":
    get:
        tags: [Info]
        operationId: getRegionCode
        summary: Geo-IP region code (auth optional)
        description: |
            Returns the caller's region code derived from their IP. Access
            token is **optional** — present when the client wants the
            account's stored region preference factored in.
        security:
            - apiKey: []
        responses:
            "200":
                description: Region code.
                content:
                    application/json:
                        schema:
                            type: object
                            required: [region]
                            properties:
                                region:
                                    type: string
                                    description: ISO 3166-1 alpha-2 country code.
            "401": { $ref: "../public-api.yaml#/components/responses/Unauthorized" }

"/info/currency":
    get:
        tags: [Info]
        operationId: getCurrencyData
        summary: Geo-IP currency code (auth optional)
        description: |
            Returns the currency code (and conversion metadata) appropriate
            for the caller's region. Access token is **optional**.
        security:
            - apiKey: []
        responses:
            "200":
                description: Currency payload.
                content:
                    application/json:
                        schema: { $ref: "../components/schemas/CurrencyInfo.yaml" }
            "401": { $ref: "../public-api.yaml#/components/responses/Unauthorized" }
