"""
    PandaDoc Public API

    PandaDoc Public API documentation  # noqa: E501

    Generated by: https://openapi-generator.tech
"""


import re  # noqa: F401
import sys  # noqa: F401

from pandadoc_client.api_client import ApiClient, Endpoint as _Endpoint
from pandadoc_client.model_utils import (  # noqa: F401
    check_allowed_values,
    check_validations,
    date,
    datetime,
    file_type,
    none_type,
    validate_and_convert_types
)
from pandadoc_client.model.documents_folder_create_request import DocumentsFolderCreateRequest
from pandadoc_client.model.documents_folder_create_response import DocumentsFolderCreateResponse
from pandadoc_client.model.documents_folder_list_response import DocumentsFolderListResponse
from pandadoc_client.model.documents_folder_rename_request import DocumentsFolderRenameRequest
from pandadoc_client.model.documents_folder_rename_response import DocumentsFolderRenameResponse
from pandadoc_client.model.templates_folder_create_request import TemplatesFolderCreateRequest
from pandadoc_client.model.templates_folder_create_response import TemplatesFolderCreateResponse
from pandadoc_client.model.templates_folder_list_response import TemplatesFolderListResponse
from pandadoc_client.model.templates_folder_rename_request import TemplatesFolderRenameRequest
from pandadoc_client.model.templates_folder_rename_response import TemplatesFolderRenameResponse


class FoldersAPIApi(object):
    """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):
        if api_client is None:
            api_client = ApiClient()
        self.api_client = api_client
        self.create_document_folder_endpoint = _Endpoint(
            settings={
                'response_type': (DocumentsFolderCreateResponse,),
                'auth': [
                    'apiKey',
                    'oauth2'
                ],
                'endpoint_path': '/public/v1/documents/folders',
                'operation_id': 'create_document_folder',
                'http_method': 'POST',
                'servers': None,
            },
            params_map={
                'all': [
                    'documents_folder_create_request',
                ],
                'required': [
                    'documents_folder_create_request',
                ],
                'nullable': [
                ],
                'enum': [
                ],
                'validation': [
                ]
            },
            root_map={
                'validations': {
                },
                'allowed_values': {
                },
                'openapi_types': {
                    'documents_folder_create_request':
                        (DocumentsFolderCreateRequest,),
                },
                'attribute_map': {
                },
                'location_map': {
                    'documents_folder_create_request': 'body',
                },
                'collection_format_map': {
                }
            },
            headers_map={
                'accept': [
                    'application/json'
                ],
                'content_type': [
                    'application/json'
                ]
            },
            api_client=api_client
        )
        self.create_template_folder_endpoint = _Endpoint(
            settings={
                'response_type': (TemplatesFolderCreateResponse,),
                'auth': [
                    'apiKey',
                    'oauth2'
                ],
                'endpoint_path': '/public/v1/templates/folders',
                'operation_id': 'create_template_folder',
                'http_method': 'POST',
                'servers': None,
            },
            params_map={
                'all': [
                    'templates_folder_create_request',
                ],
                'required': [
                    'templates_folder_create_request',
                ],
                'nullable': [
                ],
                'enum': [
                ],
                'validation': [
                ]
            },
            root_map={
                'validations': {
                },
                'allowed_values': {
                },
                'openapi_types': {
                    'templates_folder_create_request':
                        (TemplatesFolderCreateRequest,),
                },
                'attribute_map': {
                },
                'location_map': {
                    'templates_folder_create_request': 'body',
                },
                'collection_format_map': {
                }
            },
            headers_map={
                'accept': [
                    'application/json'
                ],
                'content_type': [
                    'application/json'
                ]
            },
            api_client=api_client
        )
        self.list_document_folders_endpoint = _Endpoint(
            settings={
                'response_type': (DocumentsFolderListResponse,),
                'auth': [
                    'apiKey',
                    'oauth2'
                ],
                'endpoint_path': '/public/v1/documents/folders',
                'operation_id': 'list_document_folders',
                'http_method': 'GET',
                'servers': None,
            },
            params_map={
                'all': [
                    'parent_uuid',
                    'count',
                    'page',
                ],
                'required': [],
                'nullable': [
                ],
                'enum': [
                ],
                'validation': [
                    'count',
                    'page',
                ]
            },
            root_map={
                'validations': {
                    ('count',): {

                        'inclusive_minimum': 1,
                    },
                    ('page',): {

                        'inclusive_minimum': 1,
                    },
                },
                'allowed_values': {
                },
                'openapi_types': {
                    'parent_uuid':
                        (str,),
                    'count':
                        (int,),
                    'page':
                        (int,),
                },
                'attribute_map': {
                    'parent_uuid': 'parent_uuid',
                    'count': 'count',
                    'page': 'page',
                },
                'location_map': {
                    'parent_uuid': 'query',
                    'count': 'query',
                    'page': 'query',
                },
                'collection_format_map': {
                }
            },
            headers_map={
                'accept': [
                    'application/json'
                ],
                'content_type': [],
            },
            api_client=api_client
        )
        self.list_template_folders_endpoint = _Endpoint(
            settings={
                'response_type': (TemplatesFolderListResponse,),
                'auth': [
                    'apiKey',
                    'oauth2'
                ],
                'endpoint_path': '/public/v1/templates/folders',
                'operation_id': 'list_template_folders',
                'http_method': 'GET',
                'servers': None,
            },
            params_map={
                'all': [
                    'parent_uuid',
                    'count',
                    'page',
                ],
                'required': [],
                'nullable': [
                ],
                'enum': [
                ],
                'validation': [
                    'count',
                    'page',
                ]
            },
            root_map={
                'validations': {
                    ('count',): {

                        'inclusive_minimum': 1,
                    },
                    ('page',): {

                        'inclusive_minimum': 1,
                    },
                },
                'allowed_values': {
                },
                'openapi_types': {
                    'parent_uuid':
                        (str,),
                    'count':
                        (int,),
                    'page':
                        (int,),
                },
                'attribute_map': {
                    'parent_uuid': 'parent_uuid',
                    'count': 'count',
                    'page': 'page',
                },
                'location_map': {
                    'parent_uuid': 'query',
                    'count': 'query',
                    'page': 'query',
                },
                'collection_format_map': {
                }
            },
            headers_map={
                'accept': [
                    'application/json'
                ],
                'content_type': [],
            },
            api_client=api_client
        )
        self.rename_document_folder_endpoint = _Endpoint(
            settings={
                'response_type': (DocumentsFolderRenameResponse,),
                'auth': [
                    'apiKey',
                    'oauth2'
                ],
                'endpoint_path': '/public/v1/documents/folders/{id}',
                'operation_id': 'rename_document_folder',
                'http_method': 'PUT',
                'servers': None,
            },
            params_map={
                'all': [
                    'id',
                    'documents_folder_rename_request',
                ],
                'required': [
                    'id',
                    'documents_folder_rename_request',
                ],
                'nullable': [
                ],
                'enum': [
                ],
                'validation': [
                ]
            },
            root_map={
                'validations': {
                },
                'allowed_values': {
                },
                'openapi_types': {
                    'id':
                        (str,),
                    'documents_folder_rename_request':
                        (DocumentsFolderRenameRequest,),
                },
                'attribute_map': {
                    'id': 'id',
                },
                'location_map': {
                    'id': 'path',
                    'documents_folder_rename_request': 'body',
                },
                'collection_format_map': {
                }
            },
            headers_map={
                'accept': [
                    'application/json'
                ],
                'content_type': [
                    'application/json'
                ]
            },
            api_client=api_client
        )
        self.rename_template_folder_endpoint = _Endpoint(
            settings={
                'response_type': (TemplatesFolderRenameResponse,),
                'auth': [
                    'apiKey',
                    'oauth2'
                ],
                'endpoint_path': '/public/v1/templates/folders/{id}',
                'operation_id': 'rename_template_folder',
                'http_method': 'PUT',
                'servers': None,
            },
            params_map={
                'all': [
                    'id',
                    'templates_folder_rename_request',
                ],
                'required': [
                    'id',
                    'templates_folder_rename_request',
                ],
                'nullable': [
                ],
                'enum': [
                ],
                'validation': [
                ]
            },
            root_map={
                'validations': {
                },
                'allowed_values': {
                },
                'openapi_types': {
                    'id':
                        (str,),
                    'templates_folder_rename_request':
                        (TemplatesFolderRenameRequest,),
                },
                'attribute_map': {
                    'id': 'id',
                },
                'location_map': {
                    'id': 'path',
                    'templates_folder_rename_request': 'body',
                },
                'collection_format_map': {
                }
            },
            headers_map={
                'accept': [
                    'application/json'
                ],
                'content_type': [
                    'application/json'
                ]
            },
            api_client=api_client
        )

    def create_document_folder(
        self,
        documents_folder_create_request,
        **kwargs
    ):
        """Create Documents Folder  # noqa: E501

        Create a new folder to store your documents.  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True

        >>> thread = api.create_document_folder(documents_folder_create_request, async_req=True)
        >>> result = thread.get()

        Args:
            documents_folder_create_request (DocumentsFolderCreateRequest):

        Keyword Args:
            _return_http_data_only (bool): response data without head status
                code and headers. Default is True.
            _preload_content (bool): if False, the urllib3.HTTPResponse object
                will be returned without reading/decoding response data.
                Default is True.
            _request_timeout (int/float/tuple): 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.
                Default is None.
            _check_input_type (bool): specifies if type checking
                should be done one the data sent to the server.
                Default is True.
            _check_return_type (bool): specifies if type checking
                should be done one the data received from the server.
                Default is True.
            _host_index (int/None): specifies the index of the server
                that we want to use.
                Default is read from the configuration.
            async_req (bool): execute request asynchronously

        Returns:
            DocumentsFolderCreateResponse
                If the method is called asynchronously, returns the request
                thread.
        """
        kwargs['async_req'] = kwargs.get(
            'async_req', False
        )
        kwargs['_return_http_data_only'] = kwargs.get(
            '_return_http_data_only', True
        )
        kwargs['_preload_content'] = kwargs.get(
            '_preload_content', True
        )
        kwargs['_request_timeout'] = kwargs.get(
            '_request_timeout', None
        )
        kwargs['_check_input_type'] = kwargs.get(
            '_check_input_type', True
        )
        kwargs['_check_return_type'] = kwargs.get(
            '_check_return_type', True
        )
        kwargs['_host_index'] = kwargs.get('_host_index')
        kwargs['documents_folder_create_request'] = \
            documents_folder_create_request
        return self.create_document_folder_endpoint.call_with_http_info(**kwargs)

    def create_template_folder(
        self,
        templates_folder_create_request,
        **kwargs
    ):
        """Create Templates Folder  # noqa: E501

        Create a new folder to store your templates.  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True

        >>> thread = api.create_template_folder(templates_folder_create_request, async_req=True)
        >>> result = thread.get()

        Args:
            templates_folder_create_request (TemplatesFolderCreateRequest):

        Keyword Args:
            _return_http_data_only (bool): response data without head status
                code and headers. Default is True.
            _preload_content (bool): if False, the urllib3.HTTPResponse object
                will be returned without reading/decoding response data.
                Default is True.
            _request_timeout (int/float/tuple): 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.
                Default is None.
            _check_input_type (bool): specifies if type checking
                should be done one the data sent to the server.
                Default is True.
            _check_return_type (bool): specifies if type checking
                should be done one the data received from the server.
                Default is True.
            _host_index (int/None): specifies the index of the server
                that we want to use.
                Default is read from the configuration.
            async_req (bool): execute request asynchronously

        Returns:
            TemplatesFolderCreateResponse
                If the method is called asynchronously, returns the request
                thread.
        """
        kwargs['async_req'] = kwargs.get(
            'async_req', False
        )
        kwargs['_return_http_data_only'] = kwargs.get(
            '_return_http_data_only', True
        )
        kwargs['_preload_content'] = kwargs.get(
            '_preload_content', True
        )
        kwargs['_request_timeout'] = kwargs.get(
            '_request_timeout', None
        )
        kwargs['_check_input_type'] = kwargs.get(
            '_check_input_type', True
        )
        kwargs['_check_return_type'] = kwargs.get(
            '_check_return_type', True
        )
        kwargs['_host_index'] = kwargs.get('_host_index')
        kwargs['templates_folder_create_request'] = \
            templates_folder_create_request
        return self.create_template_folder_endpoint.call_with_http_info(**kwargs)

    def list_document_folders(
        self,
        **kwargs
    ):
        """List Documents Folders  # noqa: E501

        Get the list of folders that contain Documents in your account.  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True

        >>> thread = api.list_document_folders(async_req=True)
        >>> result = thread.get()


        Keyword Args:
            parent_uuid (str): The UUID of the folder containing folders. To list the folders located in the root folder, remove this parameter in the request.. [optional]
            count (int): Optionally, specify how many folders to return. Default is 50 folders, maximum is 100 folders.. [optional]
            page (int): Optionally, specify which page of the dataset to return.. [optional]
            _return_http_data_only (bool): response data without head status
                code and headers. Default is True.
            _preload_content (bool): if False, the urllib3.HTTPResponse object
                will be returned without reading/decoding response data.
                Default is True.
            _request_timeout (int/float/tuple): 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.
                Default is None.
            _check_input_type (bool): specifies if type checking
                should be done one the data sent to the server.
                Default is True.
            _check_return_type (bool): specifies if type checking
                should be done one the data received from the server.
                Default is True.
            _host_index (int/None): specifies the index of the server
                that we want to use.
                Default is read from the configuration.
            async_req (bool): execute request asynchronously

        Returns:
            DocumentsFolderListResponse
                If the method is called asynchronously, returns the request
                thread.
        """
        kwargs['async_req'] = kwargs.get(
            'async_req', False
        )
        kwargs['_return_http_data_only'] = kwargs.get(
            '_return_http_data_only', True
        )
        kwargs['_preload_content'] = kwargs.get(
            '_preload_content', True
        )
        kwargs['_request_timeout'] = kwargs.get(
            '_request_timeout', None
        )
        kwargs['_check_input_type'] = kwargs.get(
            '_check_input_type', True
        )
        kwargs['_check_return_type'] = kwargs.get(
            '_check_return_type', True
        )
        kwargs['_host_index'] = kwargs.get('_host_index')
        return self.list_document_folders_endpoint.call_with_http_info(**kwargs)

    def list_template_folders(
        self,
        **kwargs
    ):
        """List Templates Folders  # noqa: E501

        Get the list of folders that contain Templates in your account.  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True

        >>> thread = api.list_template_folders(async_req=True)
        >>> result = thread.get()


        Keyword Args:
            parent_uuid (str): The UUID of the folder containing folders. To list the folders located in the root folder, remove this parameter in the request.. [optional]
            count (int): Optionally, specify how many folders to return. Default is 50 folders, maximum is 100 folders.. [optional]
            page (int): Optionally, specify which page of the dataset to return.. [optional]
            _return_http_data_only (bool): response data without head status
                code and headers. Default is True.
            _preload_content (bool): if False, the urllib3.HTTPResponse object
                will be returned without reading/decoding response data.
                Default is True.
            _request_timeout (int/float/tuple): 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.
                Default is None.
            _check_input_type (bool): specifies if type checking
                should be done one the data sent to the server.
                Default is True.
            _check_return_type (bool): specifies if type checking
                should be done one the data received from the server.
                Default is True.
            _host_index (int/None): specifies the index of the server
                that we want to use.
                Default is read from the configuration.
            async_req (bool): execute request asynchronously

        Returns:
            TemplatesFolderListResponse
                If the method is called asynchronously, returns the request
                thread.
        """
        kwargs['async_req'] = kwargs.get(
            'async_req', False
        )
        kwargs['_return_http_data_only'] = kwargs.get(
            '_return_http_data_only', True
        )
        kwargs['_preload_content'] = kwargs.get(
            '_preload_content', True
        )
        kwargs['_request_timeout'] = kwargs.get(
            '_request_timeout', None
        )
        kwargs['_check_input_type'] = kwargs.get(
            '_check_input_type', True
        )
        kwargs['_check_return_type'] = kwargs.get(
            '_check_return_type', True
        )
        kwargs['_host_index'] = kwargs.get('_host_index')
        return self.list_template_folders_endpoint.call_with_http_info(**kwargs)

    def rename_document_folder(
        self,
        id,
        documents_folder_rename_request,
        **kwargs
    ):
        """Rename Documents Folder  # noqa: E501

        Rename Documents Folder.  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True

        >>> thread = api.rename_document_folder(id, documents_folder_rename_request, async_req=True)
        >>> result = thread.get()

        Args:
            id (str): The UUID of the folder that you are renaming.
            documents_folder_rename_request (DocumentsFolderRenameRequest):

        Keyword Args:
            _return_http_data_only (bool): response data without head status
                code and headers. Default is True.
            _preload_content (bool): if False, the urllib3.HTTPResponse object
                will be returned without reading/decoding response data.
                Default is True.
            _request_timeout (int/float/tuple): 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.
                Default is None.
            _check_input_type (bool): specifies if type checking
                should be done one the data sent to the server.
                Default is True.
            _check_return_type (bool): specifies if type checking
                should be done one the data received from the server.
                Default is True.
            _host_index (int/None): specifies the index of the server
                that we want to use.
                Default is read from the configuration.
            async_req (bool): execute request asynchronously

        Returns:
            DocumentsFolderRenameResponse
                If the method is called asynchronously, returns the request
                thread.
        """
        kwargs['async_req'] = kwargs.get(
            'async_req', False
        )
        kwargs['_return_http_data_only'] = kwargs.get(
            '_return_http_data_only', True
        )
        kwargs['_preload_content'] = kwargs.get(
            '_preload_content', True
        )
        kwargs['_request_timeout'] = kwargs.get(
            '_request_timeout', None
        )
        kwargs['_check_input_type'] = kwargs.get(
            '_check_input_type', True
        )
        kwargs['_check_return_type'] = kwargs.get(
            '_check_return_type', True
        )
        kwargs['_host_index'] = kwargs.get('_host_index')
        kwargs['id'] = \
            id
        kwargs['documents_folder_rename_request'] = \
            documents_folder_rename_request
        return self.rename_document_folder_endpoint.call_with_http_info(**kwargs)

    def rename_template_folder(
        self,
        id,
        templates_folder_rename_request,
        **kwargs
    ):
        """Rename Templates Folder  # noqa: E501

        Rename a templates folder.  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True

        >>> thread = api.rename_template_folder(id, templates_folder_rename_request, async_req=True)
        >>> result = thread.get()

        Args:
            id (str): The UUID of the folder which you are renaming.
            templates_folder_rename_request (TemplatesFolderRenameRequest):

        Keyword Args:
            _return_http_data_only (bool): response data without head status
                code and headers. Default is True.
            _preload_content (bool): if False, the urllib3.HTTPResponse object
                will be returned without reading/decoding response data.
                Default is True.
            _request_timeout (int/float/tuple): 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.
                Default is None.
            _check_input_type (bool): specifies if type checking
                should be done one the data sent to the server.
                Default is True.
            _check_return_type (bool): specifies if type checking
                should be done one the data received from the server.
                Default is True.
            _host_index (int/None): specifies the index of the server
                that we want to use.
                Default is read from the configuration.
            async_req (bool): execute request asynchronously

        Returns:
            TemplatesFolderRenameResponse
                If the method is called asynchronously, returns the request
                thread.
        """
        kwargs['async_req'] = kwargs.get(
            'async_req', False
        )
        kwargs['_return_http_data_only'] = kwargs.get(
            '_return_http_data_only', True
        )
        kwargs['_preload_content'] = kwargs.get(
            '_preload_content', True
        )
        kwargs['_request_timeout'] = kwargs.get(
            '_request_timeout', None
        )
        kwargs['_check_input_type'] = kwargs.get(
            '_check_input_type', True
        )
        kwargs['_check_return_type'] = kwargs.get(
            '_check_return_type', True
        )
        kwargs['_host_index'] = kwargs.get('_host_index')
        kwargs['id'] = \
            id
        kwargs['templates_folder_rename_request'] = \
            templates_folder_rename_request
        return self.rename_template_folder_endpoint.call_with_http_info(**kwargs)

