# coding: utf-8

"""
    Ringer Business API

    This API provides comprehensive endpoints for the Ringer Business system. It includes functionality for managing customer accounts, addresses, sites,  phone numbers, payments, users, and other business resources.  Operations typically require authentication and appropriate permissions. 

    The version of the OpenAPI document: 1.0.4
    Contact: support@ringer.tel
    Generated by OpenAPI Generator (https://openapi-generator.tech)

    Do not edit the class manually.
"""  # noqa: E501

import warnings
from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
from typing import Any, Dict, List, Optional, Tuple, Union
from typing_extensions import Annotated

from pydantic import Field, StrictBytes, StrictInt, StrictStr
from typing import Optional, Tuple, Union
from typing_extensions import Annotated
from ringer_business.models.conference_room_list_response import ConferenceRoomListResponse
from ringer_business.models.conference_room_response import ConferenceRoomResponse

from ringer_business.api_client import ApiClient, RequestSerialized
from ringer_business.api_response import ApiResponse
from ringer_business.rest import RESTResponseType


class SiteFeaturesConferenceRoomsApi:
    """NOTE: This class is auto generated by OpenAPI Generator
    Ref: https://openapi-generator.tech

    Do not edit the class manually.
    """

    def __init__(self, api_client=None) -> None:
        if api_client is None:
            api_client = ApiClient.get_default()
        self.api_client = api_client


    @validate_call
    def create_site_conference_room(
        self,
        site_id: Annotated[StrictStr, Field(description="The unique identifier of the site.")],
        name: Annotated[StrictStr, Field(description="A user-friendly name for the conference room.")],
        pin: Annotated[Optional[StrictStr], Field(description="Numeric PIN required for participants to join the conference.")],
        moderator_pin: Annotated[Optional[StrictStr], Field(description="Numeric PIN required for the moderator to join and control the conference.")],
        profile: Annotated[Optional[StrictStr], Field(description="Conference profile or type (e.g., default, enhanced audio). Specific values depend on system configuration.")] = None,
        user_id: Annotated[Optional[StrictInt], Field(description="Identifier of the user primarily associated with this conference room, if any.")] = None,
        greeting: Annotated[Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]], Field(description="Audio file for the greeting message played when participants join.")] = None,
        music_on_hold: Annotated[Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]], Field(description="Audio file for music played while participants are on hold waiting for the moderator.")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ConferenceRoomResponse:
        """Create a Conference Room for a Site

        Adds a new conference room to the specified site. Requires providing a name, participant PIN, and moderator PIN. Greeting and music-on-hold audio files can also be uploaded during creation. 

        :param site_id: The unique identifier of the site. (required)
        :type site_id: str
        :param name: A user-friendly name for the conference room. (required)
        :type name: str
        :param pin: Numeric PIN required for participants to join the conference. (required)
        :type pin: str
        :param moderator_pin: Numeric PIN required for the moderator to join and control the conference. (required)
        :type moderator_pin: str
        :param profile: Conference profile or type (e.g., default, enhanced audio). Specific values depend on system configuration.
        :type profile: str
        :param user_id: Identifier of the user primarily associated with this conference room, if any.
        :type user_id: int
        :param greeting: Audio file for the greeting message played when participants join.
        :type greeting: bytearray
        :param music_on_hold: Audio file for music played while participants are on hold waiting for the moderator.
        :type music_on_hold: bytearray
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._create_site_conference_room_serialize(
            site_id=site_id,
            name=name,
            pin=pin,
            moderator_pin=moderator_pin,
            profile=profile,
            user_id=user_id,
            greeting=greeting,
            music_on_hold=music_on_hold,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '201': "ConferenceRoomResponse",
            '400': "Error",
            '401': "Error",
            '403': "Error",
            '404': "Error",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def create_site_conference_room_with_http_info(
        self,
        site_id: Annotated[StrictStr, Field(description="The unique identifier of the site.")],
        name: Annotated[StrictStr, Field(description="A user-friendly name for the conference room.")],
        pin: Annotated[Optional[StrictStr], Field(description="Numeric PIN required for participants to join the conference.")],
        moderator_pin: Annotated[Optional[StrictStr], Field(description="Numeric PIN required for the moderator to join and control the conference.")],
        profile: Annotated[Optional[StrictStr], Field(description="Conference profile or type (e.g., default, enhanced audio). Specific values depend on system configuration.")] = None,
        user_id: Annotated[Optional[StrictInt], Field(description="Identifier of the user primarily associated with this conference room, if any.")] = None,
        greeting: Annotated[Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]], Field(description="Audio file for the greeting message played when participants join.")] = None,
        music_on_hold: Annotated[Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]], Field(description="Audio file for music played while participants are on hold waiting for the moderator.")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ApiResponse[ConferenceRoomResponse]:
        """Create a Conference Room for a Site

        Adds a new conference room to the specified site. Requires providing a name, participant PIN, and moderator PIN. Greeting and music-on-hold audio files can also be uploaded during creation. 

        :param site_id: The unique identifier of the site. (required)
        :type site_id: str
        :param name: A user-friendly name for the conference room. (required)
        :type name: str
        :param pin: Numeric PIN required for participants to join the conference. (required)
        :type pin: str
        :param moderator_pin: Numeric PIN required for the moderator to join and control the conference. (required)
        :type moderator_pin: str
        :param profile: Conference profile or type (e.g., default, enhanced audio). Specific values depend on system configuration.
        :type profile: str
        :param user_id: Identifier of the user primarily associated with this conference room, if any.
        :type user_id: int
        :param greeting: Audio file for the greeting message played when participants join.
        :type greeting: bytearray
        :param music_on_hold: Audio file for music played while participants are on hold waiting for the moderator.
        :type music_on_hold: bytearray
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._create_site_conference_room_serialize(
            site_id=site_id,
            name=name,
            pin=pin,
            moderator_pin=moderator_pin,
            profile=profile,
            user_id=user_id,
            greeting=greeting,
            music_on_hold=music_on_hold,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '201': "ConferenceRoomResponse",
            '400': "Error",
            '401': "Error",
            '403': "Error",
            '404': "Error",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def create_site_conference_room_without_preload_content(
        self,
        site_id: Annotated[StrictStr, Field(description="The unique identifier of the site.")],
        name: Annotated[StrictStr, Field(description="A user-friendly name for the conference room.")],
        pin: Annotated[Optional[StrictStr], Field(description="Numeric PIN required for participants to join the conference.")],
        moderator_pin: Annotated[Optional[StrictStr], Field(description="Numeric PIN required for the moderator to join and control the conference.")],
        profile: Annotated[Optional[StrictStr], Field(description="Conference profile or type (e.g., default, enhanced audio). Specific values depend on system configuration.")] = None,
        user_id: Annotated[Optional[StrictInt], Field(description="Identifier of the user primarily associated with this conference room, if any.")] = None,
        greeting: Annotated[Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]], Field(description="Audio file for the greeting message played when participants join.")] = None,
        music_on_hold: Annotated[Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]], Field(description="Audio file for music played while participants are on hold waiting for the moderator.")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> RESTResponseType:
        """Create a Conference Room for a Site

        Adds a new conference room to the specified site. Requires providing a name, participant PIN, and moderator PIN. Greeting and music-on-hold audio files can also be uploaded during creation. 

        :param site_id: The unique identifier of the site. (required)
        :type site_id: str
        :param name: A user-friendly name for the conference room. (required)
        :type name: str
        :param pin: Numeric PIN required for participants to join the conference. (required)
        :type pin: str
        :param moderator_pin: Numeric PIN required for the moderator to join and control the conference. (required)
        :type moderator_pin: str
        :param profile: Conference profile or type (e.g., default, enhanced audio). Specific values depend on system configuration.
        :type profile: str
        :param user_id: Identifier of the user primarily associated with this conference room, if any.
        :type user_id: int
        :param greeting: Audio file for the greeting message played when participants join.
        :type greeting: bytearray
        :param music_on_hold: Audio file for music played while participants are on hold waiting for the moderator.
        :type music_on_hold: bytearray
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._create_site_conference_room_serialize(
            site_id=site_id,
            name=name,
            pin=pin,
            moderator_pin=moderator_pin,
            profile=profile,
            user_id=user_id,
            greeting=greeting,
            music_on_hold=music_on_hold,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '201': "ConferenceRoomResponse",
            '400': "Error",
            '401': "Error",
            '403': "Error",
            '404': "Error",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _create_site_conference_room_serialize(
        self,
        site_id,
        name,
        pin,
        moderator_pin,
        profile,
        user_id,
        greeting,
        music_on_hold,
        _request_auth,
        _content_type,
        _headers,
        _host_index,
    ) -> RequestSerialized:

        _host = None

        _collection_formats: Dict[str, str] = {
        }

        _path_params: Dict[str, str] = {}
        _query_params: List[Tuple[str, str]] = []
        _header_params: Dict[str, Optional[str]] = _headers or {}
        _form_params: List[Tuple[str, str]] = []
        _files: Dict[
            str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if site_id is not None:
            _path_params['siteId'] = site_id
        # process the query parameters
        # process the header parameters
        # process the form parameters
        if name is not None:
            _form_params.append(('name', name))
        if pin is not None:
            _form_params.append(('pin', pin))
        if moderator_pin is not None:
            _form_params.append(('moderator_pin', moderator_pin))
        if profile is not None:
            _form_params.append(('profile', profile))
        if user_id is not None:
            _form_params.append(('user_id', user_id))
        if greeting is not None:
            _files['greeting'] = greeting
        if music_on_hold is not None:
            _files['music_on_hold'] = music_on_hold
        # process the body parameter


        # set the HTTP header `Accept`
        if 'Accept' not in _header_params:
            _header_params['Accept'] = self.api_client.select_header_accept(
                [
                    'application/json'
                ]
            )

        # set the HTTP header `Content-Type`
        if _content_type:
            _header_params['Content-Type'] = _content_type
        else:
            _default_content_type = (
                self.api_client.select_header_content_type(
                    [
                        'multipart/form-data'
                    ]
                )
            )
            if _default_content_type is not None:
                _header_params['Content-Type'] = _default_content_type

        # authentication setting
        _auth_settings: List[str] = [
            'oAuth2'
        ]

        return self.api_client.param_serialize(
            method='POST',
            resource_path='/sites/{siteId}/conference-rooms',
            path_params=_path_params,
            query_params=_query_params,
            header_params=_header_params,
            body=_body_params,
            post_params=_form_params,
            files=_files,
            auth_settings=_auth_settings,
            collection_formats=_collection_formats,
            _host=_host,
            _request_auth=_request_auth
        )




    @validate_call
    def delete_site_conference_room_by_id(
        self,
        site_id: Annotated[StrictStr, Field(description="The unique identifier of the site.")],
        conference_room_id: Annotated[StrictInt, Field(description="The unique identifier of the conference room.")],
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> None:
        """Delete a Conference Room

        Permanently deletes a specific conference room from the site.

        :param site_id: The unique identifier of the site. (required)
        :type site_id: str
        :param conference_room_id: The unique identifier of the conference room. (required)
        :type conference_room_id: int
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._delete_site_conference_room_by_id_serialize(
            site_id=site_id,
            conference_room_id=conference_room_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '204': None,
            '401': "Error",
            '403': "Error",
            '404': "Error",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def delete_site_conference_room_by_id_with_http_info(
        self,
        site_id: Annotated[StrictStr, Field(description="The unique identifier of the site.")],
        conference_room_id: Annotated[StrictInt, Field(description="The unique identifier of the conference room.")],
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ApiResponse[None]:
        """Delete a Conference Room

        Permanently deletes a specific conference room from the site.

        :param site_id: The unique identifier of the site. (required)
        :type site_id: str
        :param conference_room_id: The unique identifier of the conference room. (required)
        :type conference_room_id: int
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._delete_site_conference_room_by_id_serialize(
            site_id=site_id,
            conference_room_id=conference_room_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '204': None,
            '401': "Error",
            '403': "Error",
            '404': "Error",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def delete_site_conference_room_by_id_without_preload_content(
        self,
        site_id: Annotated[StrictStr, Field(description="The unique identifier of the site.")],
        conference_room_id: Annotated[StrictInt, Field(description="The unique identifier of the conference room.")],
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> RESTResponseType:
        """Delete a Conference Room

        Permanently deletes a specific conference room from the site.

        :param site_id: The unique identifier of the site. (required)
        :type site_id: str
        :param conference_room_id: The unique identifier of the conference room. (required)
        :type conference_room_id: int
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._delete_site_conference_room_by_id_serialize(
            site_id=site_id,
            conference_room_id=conference_room_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '204': None,
            '401': "Error",
            '403': "Error",
            '404': "Error",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _delete_site_conference_room_by_id_serialize(
        self,
        site_id,
        conference_room_id,
        _request_auth,
        _content_type,
        _headers,
        _host_index,
    ) -> RequestSerialized:

        _host = None

        _collection_formats: Dict[str, str] = {
        }

        _path_params: Dict[str, str] = {}
        _query_params: List[Tuple[str, str]] = []
        _header_params: Dict[str, Optional[str]] = _headers or {}
        _form_params: List[Tuple[str, str]] = []
        _files: Dict[
            str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if site_id is not None:
            _path_params['siteId'] = site_id
        if conference_room_id is not None:
            _path_params['conferenceRoomId'] = conference_room_id
        # process the query parameters
        # process the header parameters
        # process the form parameters
        # process the body parameter


        # set the HTTP header `Accept`
        if 'Accept' not in _header_params:
            _header_params['Accept'] = self.api_client.select_header_accept(
                [
                    'application/json'
                ]
            )


        # authentication setting
        _auth_settings: List[str] = [
            'oAuth2'
        ]

        return self.api_client.param_serialize(
            method='DELETE',
            resource_path='/sites/{siteId}/conference-rooms/{conferenceRoomId}',
            path_params=_path_params,
            query_params=_query_params,
            header_params=_header_params,
            body=_body_params,
            post_params=_form_params,
            files=_files,
            auth_settings=_auth_settings,
            collection_formats=_collection_formats,
            _host=_host,
            _request_auth=_request_auth
        )




    @validate_call
    def get_site_conference_room_by_id(
        self,
        site_id: Annotated[StrictStr, Field(description="The unique identifier of the site.")],
        conference_room_id: Annotated[StrictInt, Field(description="The unique identifier of the conference room.")],
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ConferenceRoomResponse:
        """Get Conference Room Details

        Retrieves detailed information for a specific conference room by its ID, belonging to the specified site.

        :param site_id: The unique identifier of the site. (required)
        :type site_id: str
        :param conference_room_id: The unique identifier of the conference room. (required)
        :type conference_room_id: int
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._get_site_conference_room_by_id_serialize(
            site_id=site_id,
            conference_room_id=conference_room_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "ConferenceRoomResponse",
            '401': "Error",
            '403': "Error",
            '404': "Error",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def get_site_conference_room_by_id_with_http_info(
        self,
        site_id: Annotated[StrictStr, Field(description="The unique identifier of the site.")],
        conference_room_id: Annotated[StrictInt, Field(description="The unique identifier of the conference room.")],
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ApiResponse[ConferenceRoomResponse]:
        """Get Conference Room Details

        Retrieves detailed information for a specific conference room by its ID, belonging to the specified site.

        :param site_id: The unique identifier of the site. (required)
        :type site_id: str
        :param conference_room_id: The unique identifier of the conference room. (required)
        :type conference_room_id: int
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._get_site_conference_room_by_id_serialize(
            site_id=site_id,
            conference_room_id=conference_room_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "ConferenceRoomResponse",
            '401': "Error",
            '403': "Error",
            '404': "Error",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def get_site_conference_room_by_id_without_preload_content(
        self,
        site_id: Annotated[StrictStr, Field(description="The unique identifier of the site.")],
        conference_room_id: Annotated[StrictInt, Field(description="The unique identifier of the conference room.")],
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> RESTResponseType:
        """Get Conference Room Details

        Retrieves detailed information for a specific conference room by its ID, belonging to the specified site.

        :param site_id: The unique identifier of the site. (required)
        :type site_id: str
        :param conference_room_id: The unique identifier of the conference room. (required)
        :type conference_room_id: int
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._get_site_conference_room_by_id_serialize(
            site_id=site_id,
            conference_room_id=conference_room_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "ConferenceRoomResponse",
            '401': "Error",
            '403': "Error",
            '404': "Error",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _get_site_conference_room_by_id_serialize(
        self,
        site_id,
        conference_room_id,
        _request_auth,
        _content_type,
        _headers,
        _host_index,
    ) -> RequestSerialized:

        _host = None

        _collection_formats: Dict[str, str] = {
        }

        _path_params: Dict[str, str] = {}
        _query_params: List[Tuple[str, str]] = []
        _header_params: Dict[str, Optional[str]] = _headers or {}
        _form_params: List[Tuple[str, str]] = []
        _files: Dict[
            str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if site_id is not None:
            _path_params['siteId'] = site_id
        if conference_room_id is not None:
            _path_params['conferenceRoomId'] = conference_room_id
        # process the query parameters
        # process the header parameters
        # process the form parameters
        # process the body parameter


        # set the HTTP header `Accept`
        if 'Accept' not in _header_params:
            _header_params['Accept'] = self.api_client.select_header_accept(
                [
                    'application/json'
                ]
            )


        # authentication setting
        _auth_settings: List[str] = [
            'oAuth2'
        ]

        return self.api_client.param_serialize(
            method='GET',
            resource_path='/sites/{siteId}/conference-rooms/{conferenceRoomId}',
            path_params=_path_params,
            query_params=_query_params,
            header_params=_header_params,
            body=_body_params,
            post_params=_form_params,
            files=_files,
            auth_settings=_auth_settings,
            collection_formats=_collection_formats,
            _host=_host,
            _request_auth=_request_auth
        )




    @validate_call
    def list_site_available_conference_rooms(
        self,
        site_id: Annotated[StrictStr, Field(description="The unique identifier of the site.")],
        user_id: Annotated[Optional[StrictInt], Field(description="Optional. Identifier of a user to filter or contextualize available conference rooms.")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ConferenceRoomListResponse:
        """List Available Conference Rooms for a Site/User

        Retrieves a list of conference rooms available for assignment to the specified site. The original Teliax API included an optional `user_id` query parameter, which might imply that availability could also be filtered or contextualized by a user. This parameter is included here. 

        :param site_id: The unique identifier of the site. (required)
        :type site_id: str
        :param user_id: Optional. Identifier of a user to filter or contextualize available conference rooms.
        :type user_id: int
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._list_site_available_conference_rooms_serialize(
            site_id=site_id,
            user_id=user_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "ConferenceRoomListResponse",
            '401': "Error",
            '403': "Error",
            '404': "Error",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def list_site_available_conference_rooms_with_http_info(
        self,
        site_id: Annotated[StrictStr, Field(description="The unique identifier of the site.")],
        user_id: Annotated[Optional[StrictInt], Field(description="Optional. Identifier of a user to filter or contextualize available conference rooms.")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ApiResponse[ConferenceRoomListResponse]:
        """List Available Conference Rooms for a Site/User

        Retrieves a list of conference rooms available for assignment to the specified site. The original Teliax API included an optional `user_id` query parameter, which might imply that availability could also be filtered or contextualized by a user. This parameter is included here. 

        :param site_id: The unique identifier of the site. (required)
        :type site_id: str
        :param user_id: Optional. Identifier of a user to filter or contextualize available conference rooms.
        :type user_id: int
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._list_site_available_conference_rooms_serialize(
            site_id=site_id,
            user_id=user_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "ConferenceRoomListResponse",
            '401': "Error",
            '403': "Error",
            '404': "Error",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def list_site_available_conference_rooms_without_preload_content(
        self,
        site_id: Annotated[StrictStr, Field(description="The unique identifier of the site.")],
        user_id: Annotated[Optional[StrictInt], Field(description="Optional. Identifier of a user to filter or contextualize available conference rooms.")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> RESTResponseType:
        """List Available Conference Rooms for a Site/User

        Retrieves a list of conference rooms available for assignment to the specified site. The original Teliax API included an optional `user_id` query parameter, which might imply that availability could also be filtered or contextualized by a user. This parameter is included here. 

        :param site_id: The unique identifier of the site. (required)
        :type site_id: str
        :param user_id: Optional. Identifier of a user to filter or contextualize available conference rooms.
        :type user_id: int
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._list_site_available_conference_rooms_serialize(
            site_id=site_id,
            user_id=user_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "ConferenceRoomListResponse",
            '401': "Error",
            '403': "Error",
            '404': "Error",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _list_site_available_conference_rooms_serialize(
        self,
        site_id,
        user_id,
        _request_auth,
        _content_type,
        _headers,
        _host_index,
    ) -> RequestSerialized:

        _host = None

        _collection_formats: Dict[str, str] = {
        }

        _path_params: Dict[str, str] = {}
        _query_params: List[Tuple[str, str]] = []
        _header_params: Dict[str, Optional[str]] = _headers or {}
        _form_params: List[Tuple[str, str]] = []
        _files: Dict[
            str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if site_id is not None:
            _path_params['siteId'] = site_id
        # process the query parameters
        if user_id is not None:
            
            _query_params.append(('user_id', user_id))
            
        # process the header parameters
        # process the form parameters
        # process the body parameter


        # set the HTTP header `Accept`
        if 'Accept' not in _header_params:
            _header_params['Accept'] = self.api_client.select_header_accept(
                [
                    'application/json'
                ]
            )


        # authentication setting
        _auth_settings: List[str] = [
            'oAuth2'
        ]

        return self.api_client.param_serialize(
            method='GET',
            resource_path='/sites/{siteId}/conference-rooms/available',
            path_params=_path_params,
            query_params=_query_params,
            header_params=_header_params,
            body=_body_params,
            post_params=_form_params,
            files=_files,
            auth_settings=_auth_settings,
            collection_formats=_collection_formats,
            _host=_host,
            _request_auth=_request_auth
        )




    @validate_call
    def list_site_conference_rooms(
        self,
        site_id: Annotated[StrictStr, Field(description="The unique identifier of the site.")],
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ConferenceRoomListResponse:
        """List Conference Rooms for a Site

        Retrieves a list of all conference rooms configured for the specified site.

        :param site_id: The unique identifier of the site. (required)
        :type site_id: str
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._list_site_conference_rooms_serialize(
            site_id=site_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "ConferenceRoomListResponse",
            '401': "Error",
            '403': "Error",
            '404': "Error",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def list_site_conference_rooms_with_http_info(
        self,
        site_id: Annotated[StrictStr, Field(description="The unique identifier of the site.")],
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ApiResponse[ConferenceRoomListResponse]:
        """List Conference Rooms for a Site

        Retrieves a list of all conference rooms configured for the specified site.

        :param site_id: The unique identifier of the site. (required)
        :type site_id: str
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._list_site_conference_rooms_serialize(
            site_id=site_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "ConferenceRoomListResponse",
            '401': "Error",
            '403': "Error",
            '404': "Error",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def list_site_conference_rooms_without_preload_content(
        self,
        site_id: Annotated[StrictStr, Field(description="The unique identifier of the site.")],
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> RESTResponseType:
        """List Conference Rooms for a Site

        Retrieves a list of all conference rooms configured for the specified site.

        :param site_id: The unique identifier of the site. (required)
        :type site_id: str
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._list_site_conference_rooms_serialize(
            site_id=site_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "ConferenceRoomListResponse",
            '401': "Error",
            '403': "Error",
            '404': "Error",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _list_site_conference_rooms_serialize(
        self,
        site_id,
        _request_auth,
        _content_type,
        _headers,
        _host_index,
    ) -> RequestSerialized:

        _host = None

        _collection_formats: Dict[str, str] = {
        }

        _path_params: Dict[str, str] = {}
        _query_params: List[Tuple[str, str]] = []
        _header_params: Dict[str, Optional[str]] = _headers or {}
        _form_params: List[Tuple[str, str]] = []
        _files: Dict[
            str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if site_id is not None:
            _path_params['siteId'] = site_id
        # process the query parameters
        # process the header parameters
        # process the form parameters
        # process the body parameter


        # set the HTTP header `Accept`
        if 'Accept' not in _header_params:
            _header_params['Accept'] = self.api_client.select_header_accept(
                [
                    'application/json'
                ]
            )


        # authentication setting
        _auth_settings: List[str] = [
            'oAuth2'
        ]

        return self.api_client.param_serialize(
            method='GET',
            resource_path='/sites/{siteId}/conference-rooms',
            path_params=_path_params,
            query_params=_query_params,
            header_params=_header_params,
            body=_body_params,
            post_params=_form_params,
            files=_files,
            auth_settings=_auth_settings,
            collection_formats=_collection_formats,
            _host=_host,
            _request_auth=_request_auth
        )




    @validate_call
    def transfer_conference_room_to_new_site(
        self,
        site_id: Annotated[StrictStr, Field(description="The unique identifier of the site.")],
        conference_room_id: Annotated[StrictInt, Field(description="The unique identifier of the conference room.")],
        new_site_id: Annotated[StrictInt, Field(description="The unique identifier of the target site for the conference room.")],
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ConferenceRoomResponse:
        """Transfer Conference Room to Another Site

        Moves a conference room from its current site (specified in the path)  to a new target site (specified in the request body) within the same customer account. 

        :param site_id: The unique identifier of the site. (required)
        :type site_id: str
        :param conference_room_id: The unique identifier of the conference room. (required)
        :type conference_room_id: int
        :param new_site_id: The unique identifier of the target site for the conference room. (required)
        :type new_site_id: int
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._transfer_conference_room_to_new_site_serialize(
            site_id=site_id,
            conference_room_id=conference_room_id,
            new_site_id=new_site_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "ConferenceRoomResponse",
            '400': "Error",
            '401': "Error",
            '403': "Error",
            '404': "Error",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def transfer_conference_room_to_new_site_with_http_info(
        self,
        site_id: Annotated[StrictStr, Field(description="The unique identifier of the site.")],
        conference_room_id: Annotated[StrictInt, Field(description="The unique identifier of the conference room.")],
        new_site_id: Annotated[StrictInt, Field(description="The unique identifier of the target site for the conference room.")],
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ApiResponse[ConferenceRoomResponse]:
        """Transfer Conference Room to Another Site

        Moves a conference room from its current site (specified in the path)  to a new target site (specified in the request body) within the same customer account. 

        :param site_id: The unique identifier of the site. (required)
        :type site_id: str
        :param conference_room_id: The unique identifier of the conference room. (required)
        :type conference_room_id: int
        :param new_site_id: The unique identifier of the target site for the conference room. (required)
        :type new_site_id: int
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._transfer_conference_room_to_new_site_serialize(
            site_id=site_id,
            conference_room_id=conference_room_id,
            new_site_id=new_site_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "ConferenceRoomResponse",
            '400': "Error",
            '401': "Error",
            '403': "Error",
            '404': "Error",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def transfer_conference_room_to_new_site_without_preload_content(
        self,
        site_id: Annotated[StrictStr, Field(description="The unique identifier of the site.")],
        conference_room_id: Annotated[StrictInt, Field(description="The unique identifier of the conference room.")],
        new_site_id: Annotated[StrictInt, Field(description="The unique identifier of the target site for the conference room.")],
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> RESTResponseType:
        """Transfer Conference Room to Another Site

        Moves a conference room from its current site (specified in the path)  to a new target site (specified in the request body) within the same customer account. 

        :param site_id: The unique identifier of the site. (required)
        :type site_id: str
        :param conference_room_id: The unique identifier of the conference room. (required)
        :type conference_room_id: int
        :param new_site_id: The unique identifier of the target site for the conference room. (required)
        :type new_site_id: int
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._transfer_conference_room_to_new_site_serialize(
            site_id=site_id,
            conference_room_id=conference_room_id,
            new_site_id=new_site_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "ConferenceRoomResponse",
            '400': "Error",
            '401': "Error",
            '403': "Error",
            '404': "Error",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _transfer_conference_room_to_new_site_serialize(
        self,
        site_id,
        conference_room_id,
        new_site_id,
        _request_auth,
        _content_type,
        _headers,
        _host_index,
    ) -> RequestSerialized:

        _host = None

        _collection_formats: Dict[str, str] = {
        }

        _path_params: Dict[str, str] = {}
        _query_params: List[Tuple[str, str]] = []
        _header_params: Dict[str, Optional[str]] = _headers or {}
        _form_params: List[Tuple[str, str]] = []
        _files: Dict[
            str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if site_id is not None:
            _path_params['siteId'] = site_id
        if conference_room_id is not None:
            _path_params['conferenceRoomId'] = conference_room_id
        # process the query parameters
        # process the header parameters
        # process the form parameters
        if new_site_id is not None:
            _form_params.append(('new_site_id', new_site_id))
        # process the body parameter


        # set the HTTP header `Accept`
        if 'Accept' not in _header_params:
            _header_params['Accept'] = self.api_client.select_header_accept(
                [
                    'application/json'
                ]
            )

        # set the HTTP header `Content-Type`
        if _content_type:
            _header_params['Content-Type'] = _content_type
        else:
            _default_content_type = (
                self.api_client.select_header_content_type(
                    [
                        'application/x-www-form-urlencoded'
                    ]
                )
            )
            if _default_content_type is not None:
                _header_params['Content-Type'] = _default_content_type

        # authentication setting
        _auth_settings: List[str] = [
            'oAuth2'
        ]

        return self.api_client.param_serialize(
            method='POST',
            resource_path='/sites/{siteId}/conference-rooms/{conferenceRoomId}/transfer',
            path_params=_path_params,
            query_params=_query_params,
            header_params=_header_params,
            body=_body_params,
            post_params=_form_params,
            files=_files,
            auth_settings=_auth_settings,
            collection_formats=_collection_formats,
            _host=_host,
            _request_auth=_request_auth
        )




    @validate_call
    def update_site_conference_room_by_id(
        self,
        site_id: Annotated[StrictStr, Field(description="The unique identifier of the site.")],
        conference_room_id: Annotated[StrictInt, Field(description="The unique identifier of the conference room.")],
        name: Annotated[StrictStr, Field(description="A user-friendly name for the conference room.")],
        pin: Annotated[Optional[StrictStr], Field(description="Numeric PIN required for participants to join the conference.")],
        moderator_pin: Annotated[Optional[StrictStr], Field(description="Numeric PIN required for the moderator to join and control the conference.")],
        profile: Annotated[Optional[StrictStr], Field(description="Conference profile or type (e.g., default, enhanced audio). Specific values depend on system configuration.")] = None,
        user_id: Annotated[Optional[StrictInt], Field(description="Identifier of the user primarily associated with this conference room, if any.")] = None,
        greeting: Annotated[Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]], Field(description="New audio file for the greeting message. If not provided, existing greeting remains.")] = None,
        music_on_hold: Annotated[Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]], Field(description="New audio file for music on hold. If not provided, existing music remains.")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ConferenceRoomResponse:
        """Update Conference Room Configuration

        Updates the configuration for a specific conference room on a site. Allows changing the name, PINs, profile, and audio files (greeting, music on hold). 

        :param site_id: The unique identifier of the site. (required)
        :type site_id: str
        :param conference_room_id: The unique identifier of the conference room. (required)
        :type conference_room_id: int
        :param name: A user-friendly name for the conference room. (required)
        :type name: str
        :param pin: Numeric PIN required for participants to join the conference. (required)
        :type pin: str
        :param moderator_pin: Numeric PIN required for the moderator to join and control the conference. (required)
        :type moderator_pin: str
        :param profile: Conference profile or type (e.g., default, enhanced audio). Specific values depend on system configuration.
        :type profile: str
        :param user_id: Identifier of the user primarily associated with this conference room, if any.
        :type user_id: int
        :param greeting: New audio file for the greeting message. If not provided, existing greeting remains.
        :type greeting: bytearray
        :param music_on_hold: New audio file for music on hold. If not provided, existing music remains.
        :type music_on_hold: bytearray
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._update_site_conference_room_by_id_serialize(
            site_id=site_id,
            conference_room_id=conference_room_id,
            name=name,
            pin=pin,
            moderator_pin=moderator_pin,
            profile=profile,
            user_id=user_id,
            greeting=greeting,
            music_on_hold=music_on_hold,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "ConferenceRoomResponse",
            '400': "Error",
            '401': "Error",
            '403': "Error",
            '404': "Error",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def update_site_conference_room_by_id_with_http_info(
        self,
        site_id: Annotated[StrictStr, Field(description="The unique identifier of the site.")],
        conference_room_id: Annotated[StrictInt, Field(description="The unique identifier of the conference room.")],
        name: Annotated[StrictStr, Field(description="A user-friendly name for the conference room.")],
        pin: Annotated[Optional[StrictStr], Field(description="Numeric PIN required for participants to join the conference.")],
        moderator_pin: Annotated[Optional[StrictStr], Field(description="Numeric PIN required for the moderator to join and control the conference.")],
        profile: Annotated[Optional[StrictStr], Field(description="Conference profile or type (e.g., default, enhanced audio). Specific values depend on system configuration.")] = None,
        user_id: Annotated[Optional[StrictInt], Field(description="Identifier of the user primarily associated with this conference room, if any.")] = None,
        greeting: Annotated[Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]], Field(description="New audio file for the greeting message. If not provided, existing greeting remains.")] = None,
        music_on_hold: Annotated[Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]], Field(description="New audio file for music on hold. If not provided, existing music remains.")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ApiResponse[ConferenceRoomResponse]:
        """Update Conference Room Configuration

        Updates the configuration for a specific conference room on a site. Allows changing the name, PINs, profile, and audio files (greeting, music on hold). 

        :param site_id: The unique identifier of the site. (required)
        :type site_id: str
        :param conference_room_id: The unique identifier of the conference room. (required)
        :type conference_room_id: int
        :param name: A user-friendly name for the conference room. (required)
        :type name: str
        :param pin: Numeric PIN required for participants to join the conference. (required)
        :type pin: str
        :param moderator_pin: Numeric PIN required for the moderator to join and control the conference. (required)
        :type moderator_pin: str
        :param profile: Conference profile or type (e.g., default, enhanced audio). Specific values depend on system configuration.
        :type profile: str
        :param user_id: Identifier of the user primarily associated with this conference room, if any.
        :type user_id: int
        :param greeting: New audio file for the greeting message. If not provided, existing greeting remains.
        :type greeting: bytearray
        :param music_on_hold: New audio file for music on hold. If not provided, existing music remains.
        :type music_on_hold: bytearray
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._update_site_conference_room_by_id_serialize(
            site_id=site_id,
            conference_room_id=conference_room_id,
            name=name,
            pin=pin,
            moderator_pin=moderator_pin,
            profile=profile,
            user_id=user_id,
            greeting=greeting,
            music_on_hold=music_on_hold,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "ConferenceRoomResponse",
            '400': "Error",
            '401': "Error",
            '403': "Error",
            '404': "Error",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def update_site_conference_room_by_id_without_preload_content(
        self,
        site_id: Annotated[StrictStr, Field(description="The unique identifier of the site.")],
        conference_room_id: Annotated[StrictInt, Field(description="The unique identifier of the conference room.")],
        name: Annotated[StrictStr, Field(description="A user-friendly name for the conference room.")],
        pin: Annotated[Optional[StrictStr], Field(description="Numeric PIN required for participants to join the conference.")],
        moderator_pin: Annotated[Optional[StrictStr], Field(description="Numeric PIN required for the moderator to join and control the conference.")],
        profile: Annotated[Optional[StrictStr], Field(description="Conference profile or type (e.g., default, enhanced audio). Specific values depend on system configuration.")] = None,
        user_id: Annotated[Optional[StrictInt], Field(description="Identifier of the user primarily associated with this conference room, if any.")] = None,
        greeting: Annotated[Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]], Field(description="New audio file for the greeting message. If not provided, existing greeting remains.")] = None,
        music_on_hold: Annotated[Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]], Field(description="New audio file for music on hold. If not provided, existing music remains.")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> RESTResponseType:
        """Update Conference Room Configuration

        Updates the configuration for a specific conference room on a site. Allows changing the name, PINs, profile, and audio files (greeting, music on hold). 

        :param site_id: The unique identifier of the site. (required)
        :type site_id: str
        :param conference_room_id: The unique identifier of the conference room. (required)
        :type conference_room_id: int
        :param name: A user-friendly name for the conference room. (required)
        :type name: str
        :param pin: Numeric PIN required for participants to join the conference. (required)
        :type pin: str
        :param moderator_pin: Numeric PIN required for the moderator to join and control the conference. (required)
        :type moderator_pin: str
        :param profile: Conference profile or type (e.g., default, enhanced audio). Specific values depend on system configuration.
        :type profile: str
        :param user_id: Identifier of the user primarily associated with this conference room, if any.
        :type user_id: int
        :param greeting: New audio file for the greeting message. If not provided, existing greeting remains.
        :type greeting: bytearray
        :param music_on_hold: New audio file for music on hold. If not provided, existing music remains.
        :type music_on_hold: bytearray
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._update_site_conference_room_by_id_serialize(
            site_id=site_id,
            conference_room_id=conference_room_id,
            name=name,
            pin=pin,
            moderator_pin=moderator_pin,
            profile=profile,
            user_id=user_id,
            greeting=greeting,
            music_on_hold=music_on_hold,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "ConferenceRoomResponse",
            '400': "Error",
            '401': "Error",
            '403': "Error",
            '404': "Error",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _update_site_conference_room_by_id_serialize(
        self,
        site_id,
        conference_room_id,
        name,
        pin,
        moderator_pin,
        profile,
        user_id,
        greeting,
        music_on_hold,
        _request_auth,
        _content_type,
        _headers,
        _host_index,
    ) -> RequestSerialized:

        _host = None

        _collection_formats: Dict[str, str] = {
        }

        _path_params: Dict[str, str] = {}
        _query_params: List[Tuple[str, str]] = []
        _header_params: Dict[str, Optional[str]] = _headers or {}
        _form_params: List[Tuple[str, str]] = []
        _files: Dict[
            str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if site_id is not None:
            _path_params['siteId'] = site_id
        if conference_room_id is not None:
            _path_params['conferenceRoomId'] = conference_room_id
        # process the query parameters
        # process the header parameters
        # process the form parameters
        if name is not None:
            _form_params.append(('name', name))
        if pin is not None:
            _form_params.append(('pin', pin))
        if moderator_pin is not None:
            _form_params.append(('moderator_pin', moderator_pin))
        if profile is not None:
            _form_params.append(('profile', profile))
        if user_id is not None:
            _form_params.append(('user_id', user_id))
        if greeting is not None:
            _files['greeting'] = greeting
        if music_on_hold is not None:
            _files['music_on_hold'] = music_on_hold
        # process the body parameter


        # set the HTTP header `Accept`
        if 'Accept' not in _header_params:
            _header_params['Accept'] = self.api_client.select_header_accept(
                [
                    'application/json'
                ]
            )

        # set the HTTP header `Content-Type`
        if _content_type:
            _header_params['Content-Type'] = _content_type
        else:
            _default_content_type = (
                self.api_client.select_header_content_type(
                    [
                        'multipart/form-data'
                    ]
                )
            )
            if _default_content_type is not None:
                _header_params['Content-Type'] = _default_content_type

        # authentication setting
        _auth_settings: List[str] = [
            'oAuth2'
        ]

        return self.api_client.param_serialize(
            method='PUT',
            resource_path='/sites/{siteId}/conference-rooms/{conferenceRoomId}',
            path_params=_path_params,
            query_params=_query_params,
            header_params=_header_params,
            body=_body_params,
            post_params=_form_params,
            files=_files,
            auth_settings=_auth_settings,
            collection_formats=_collection_formats,
            _host=_host,
            _request_auth=_request_auth
        )




    @validate_call
    def upload_site_conference_room_audio(
        self,
        site_id: Annotated[StrictStr, Field(description="The unique identifier of the site.")],
        conference_room_id: Annotated[StrictInt, Field(description="The unique identifier of the conference room.")],
        greeting: Annotated[Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]], Field(description="Audio file for the menu greeting (e.g., .mp3, .wav).")] = None,
        music_on_hold: Annotated[Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]], Field(description="Audio file for music on hold. If not provided, existing music is unchanged.")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ConferenceRoomResponse:
        """Upload Conference Room Audio Files

        Uploads or updates the greeting and/or music on hold audio files for a specific conference room. This is a PATCH operation as it modifies specific parts of the conference room resource (its audio files). The original Teliax API had this as PATCH. 

        :param site_id: The unique identifier of the site. (required)
        :type site_id: str
        :param conference_room_id: The unique identifier of the conference room. (required)
        :type conference_room_id: int
        :param greeting: Audio file for the menu greeting (e.g., .mp3, .wav).
        :type greeting: bytearray
        :param music_on_hold: Audio file for music on hold. If not provided, existing music is unchanged.
        :type music_on_hold: bytearray
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._upload_site_conference_room_audio_serialize(
            site_id=site_id,
            conference_room_id=conference_room_id,
            greeting=greeting,
            music_on_hold=music_on_hold,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "ConferenceRoomResponse",
            '400': "Error",
            '401': "Error",
            '403': "Error",
            '404': "Error",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def upload_site_conference_room_audio_with_http_info(
        self,
        site_id: Annotated[StrictStr, Field(description="The unique identifier of the site.")],
        conference_room_id: Annotated[StrictInt, Field(description="The unique identifier of the conference room.")],
        greeting: Annotated[Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]], Field(description="Audio file for the menu greeting (e.g., .mp3, .wav).")] = None,
        music_on_hold: Annotated[Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]], Field(description="Audio file for music on hold. If not provided, existing music is unchanged.")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ApiResponse[ConferenceRoomResponse]:
        """Upload Conference Room Audio Files

        Uploads or updates the greeting and/or music on hold audio files for a specific conference room. This is a PATCH operation as it modifies specific parts of the conference room resource (its audio files). The original Teliax API had this as PATCH. 

        :param site_id: The unique identifier of the site. (required)
        :type site_id: str
        :param conference_room_id: The unique identifier of the conference room. (required)
        :type conference_room_id: int
        :param greeting: Audio file for the menu greeting (e.g., .mp3, .wav).
        :type greeting: bytearray
        :param music_on_hold: Audio file for music on hold. If not provided, existing music is unchanged.
        :type music_on_hold: bytearray
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._upload_site_conference_room_audio_serialize(
            site_id=site_id,
            conference_room_id=conference_room_id,
            greeting=greeting,
            music_on_hold=music_on_hold,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "ConferenceRoomResponse",
            '400': "Error",
            '401': "Error",
            '403': "Error",
            '404': "Error",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def upload_site_conference_room_audio_without_preload_content(
        self,
        site_id: Annotated[StrictStr, Field(description="The unique identifier of the site.")],
        conference_room_id: Annotated[StrictInt, Field(description="The unique identifier of the conference room.")],
        greeting: Annotated[Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]], Field(description="Audio file for the menu greeting (e.g., .mp3, .wav).")] = None,
        music_on_hold: Annotated[Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]], Field(description="Audio file for music on hold. If not provided, existing music is unchanged.")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> RESTResponseType:
        """Upload Conference Room Audio Files

        Uploads or updates the greeting and/or music on hold audio files for a specific conference room. This is a PATCH operation as it modifies specific parts of the conference room resource (its audio files). The original Teliax API had this as PATCH. 

        :param site_id: The unique identifier of the site. (required)
        :type site_id: str
        :param conference_room_id: The unique identifier of the conference room. (required)
        :type conference_room_id: int
        :param greeting: Audio file for the menu greeting (e.g., .mp3, .wav).
        :type greeting: bytearray
        :param music_on_hold: Audio file for music on hold. If not provided, existing music is unchanged.
        :type music_on_hold: bytearray
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._upload_site_conference_room_audio_serialize(
            site_id=site_id,
            conference_room_id=conference_room_id,
            greeting=greeting,
            music_on_hold=music_on_hold,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "ConferenceRoomResponse",
            '400': "Error",
            '401': "Error",
            '403': "Error",
            '404': "Error",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _upload_site_conference_room_audio_serialize(
        self,
        site_id,
        conference_room_id,
        greeting,
        music_on_hold,
        _request_auth,
        _content_type,
        _headers,
        _host_index,
    ) -> RequestSerialized:

        _host = None

        _collection_formats: Dict[str, str] = {
        }

        _path_params: Dict[str, str] = {}
        _query_params: List[Tuple[str, str]] = []
        _header_params: Dict[str, Optional[str]] = _headers or {}
        _form_params: List[Tuple[str, str]] = []
        _files: Dict[
            str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if site_id is not None:
            _path_params['siteId'] = site_id
        if conference_room_id is not None:
            _path_params['conferenceRoomId'] = conference_room_id
        # process the query parameters
        # process the header parameters
        # process the form parameters
        if greeting is not None:
            _files['greeting'] = greeting
        if music_on_hold is not None:
            _files['music_on_hold'] = music_on_hold
        # process the body parameter


        # set the HTTP header `Accept`
        if 'Accept' not in _header_params:
            _header_params['Accept'] = self.api_client.select_header_accept(
                [
                    'application/json'
                ]
            )

        # set the HTTP header `Content-Type`
        if _content_type:
            _header_params['Content-Type'] = _content_type
        else:
            _default_content_type = (
                self.api_client.select_header_content_type(
                    [
                        'multipart/form-data'
                    ]
                )
            )
            if _default_content_type is not None:
                _header_params['Content-Type'] = _default_content_type

        # authentication setting
        _auth_settings: List[str] = [
            'oAuth2'
        ]

        return self.api_client.param_serialize(
            method='PATCH',
            resource_path='/sites/{siteId}/conference-rooms/{conferenceRoomId}/upload',
            path_params=_path_params,
            query_params=_query_params,
            header_params=_header_params,
            body=_body_params,
            post_params=_form_params,
            files=_files,
            auth_settings=_auth_settings,
            collection_formats=_collection_formats,
            _host=_host,
            _request_auth=_request_auth
        )


