# coding: utf-8

"""
    Spotii Billing API

    API for Billing  # noqa: E501

    OpenAPI spec version: v1.0
    Contact: hello@nuclearo.com
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""

from __future__ import absolute_import

import re  # noqa: F401

# python 2 and python 3 compatibility library
import six

from spotii_billing_client.api_client import ApiClient


class PushNotificationsApi(object):
    """NOTE: This class is auto generated by the swagger code generator program.

    Do not edit the class manually.
    Ref: https://github.com/swagger-api/swagger-codegen
    """

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

    def push_notifications_create(self, body, **kwargs):  # noqa: E501
        """push_notifications_create  # noqa: E501

        Push notifications is a convenient way to get notified about events from the system. One can register a callback, i.e a valid URL that will be called whenever there is an event dispatched for this tenant. Note that this can result in a large numbers of calls, basically everytime there is a state of changes for one of the Account in this tenant, such callback would be invoked.  In case the error, the system will retry the callback as defined by the system settings \"billing.notifications.retries\"  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.push_notifications_create(body, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param PushNotification body: (required)
        :return: PushNotification
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.push_notifications_create_with_http_info(body, **kwargs)  # noqa: E501
        else:
            (data) = self.push_notifications_create_with_http_info(body, **kwargs)  # noqa: E501
            return data

    def push_notifications_create_with_http_info(self, body, **kwargs):  # noqa: E501
        """push_notifications_create  # noqa: E501

        Push notifications is a convenient way to get notified about events from the system. One can register a callback, i.e a valid URL that will be called whenever there is an event dispatched for this tenant. Note that this can result in a large numbers of calls, basically everytime there is a state of changes for one of the Account in this tenant, such callback would be invoked.  In case the error, the system will retry the callback as defined by the system settings \"billing.notifications.retries\"  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.push_notifications_create_with_http_info(body, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param PushNotification body: (required)
        :return: PushNotification
                 If the method is called asynchronously,
                 returns the request thread.
        """

        all_params = ['body']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        params = locals()
        for key, val in six.iteritems(params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method push_notifications_create" % key
                )
            params[key] = val
        del params['kwargs']
        # verify the required parameter 'body' is set
        if ('body' not in params or
                params['body'] is None):
            raise ValueError("Missing the required parameter `body` when calling `push_notifications_create`")  # noqa: E501

        collection_formats = {}

        path_params = {}

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'body' in params:
            body_params = params['body']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Basic', 'Bearer']  # noqa: E501

        return self.api_client.call_api(
            '/push_notifications/', 'POST',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='PushNotification',  # noqa: E501
            auth_settings=auth_settings,
            async_req=params.get('async_req'),
            _return_http_data_only=params.get('_return_http_data_only'),
            _preload_content=params.get('_preload_content', True),
            _request_timeout=params.get('_request_timeout'),
            collection_formats=collection_formats)

    def push_notifications_delete(self, push_notification_id, **kwargs):  # noqa: E501
        """push_notifications_delete  # noqa: E501

        Push notifications is a convenient way to get notified about events from the system. One can register a callback, i.e a valid URL that will be called whenever there is an event dispatched for this tenant. Note that this can result in a large numbers of calls, basically everytime there is a state of changes for one of the Account in this tenant, such callback would be invoked.  In case the error, the system will retry the callback as defined by the system settings \"billing.notifications.retries\"  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.push_notifications_delete(push_notification_id, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str push_notification_id: A UUID string identifying this push notification. (required)
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.push_notifications_delete_with_http_info(push_notification_id, **kwargs)  # noqa: E501
        else:
            (data) = self.push_notifications_delete_with_http_info(push_notification_id, **kwargs)  # noqa: E501
            return data

    def push_notifications_delete_with_http_info(self, push_notification_id, **kwargs):  # noqa: E501
        """push_notifications_delete  # noqa: E501

        Push notifications is a convenient way to get notified about events from the system. One can register a callback, i.e a valid URL that will be called whenever there is an event dispatched for this tenant. Note that this can result in a large numbers of calls, basically everytime there is a state of changes for one of the Account in this tenant, such callback would be invoked.  In case the error, the system will retry the callback as defined by the system settings \"billing.notifications.retries\"  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.push_notifications_delete_with_http_info(push_notification_id, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str push_notification_id: A UUID string identifying this push notification. (required)
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        all_params = ['push_notification_id']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        params = locals()
        for key, val in six.iteritems(params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method push_notifications_delete" % key
                )
            params[key] = val
        del params['kwargs']
        # verify the required parameter 'push_notification_id' is set
        if ('push_notification_id' not in params or
                params['push_notification_id'] is None):
            raise ValueError("Missing the required parameter `push_notification_id` when calling `push_notifications_delete`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'push_notification_id' in params:
            path_params['push_notification_id'] = params['push_notification_id']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['Basic', 'Bearer']  # noqa: E501

        return self.api_client.call_api(
            '/push_notifications/{push_notification_id}/', 'DELETE',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type=None,  # noqa: E501
            auth_settings=auth_settings,
            async_req=params.get('async_req'),
            _return_http_data_only=params.get('_return_http_data_only'),
            _preload_content=params.get('_preload_content', True),
            _request_timeout=params.get('_request_timeout'),
            collection_formats=collection_formats)

    def push_notifications_list(self, **kwargs):  # noqa: E501
        """push_notifications_list  # noqa: E501

        Push notifications is a convenient way to get notified about events from the system. One can register a callback, i.e a valid URL that will be called whenever there is an event dispatched for this tenant. Note that this can result in a large numbers of calls, basically everytime there is a state of changes for one of the Account in this tenant, such callback would be invoked.  In case the error, the system will retry the callback as defined by the system settings \"billing.notifications.retries\"  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.push_notifications_list(async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :return: list[PushNotification]
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.push_notifications_list_with_http_info(**kwargs)  # noqa: E501
        else:
            (data) = self.push_notifications_list_with_http_info(**kwargs)  # noqa: E501
            return data

    def push_notifications_list_with_http_info(self, **kwargs):  # noqa: E501
        """push_notifications_list  # noqa: E501

        Push notifications is a convenient way to get notified about events from the system. One can register a callback, i.e a valid URL that will be called whenever there is an event dispatched for this tenant. Note that this can result in a large numbers of calls, basically everytime there is a state of changes for one of the Account in this tenant, such callback would be invoked.  In case the error, the system will retry the callback as defined by the system settings \"billing.notifications.retries\"  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.push_notifications_list_with_http_info(async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :return: list[PushNotification]
                 If the method is called asynchronously,
                 returns the request thread.
        """

        all_params = []  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        params = locals()
        for key, val in six.iteritems(params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method push_notifications_list" % key
                )
            params[key] = val
        del params['kwargs']

        collection_formats = {}

        path_params = {}

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Basic', 'Bearer']  # noqa: E501

        return self.api_client.call_api(
            '/push_notifications/', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='list[PushNotification]',  # noqa: E501
            auth_settings=auth_settings,
            async_req=params.get('async_req'),
            _return_http_data_only=params.get('_return_http_data_only'),
            _preload_content=params.get('_preload_content', True),
            _request_timeout=params.get('_request_timeout'),
            collection_formats=collection_formats)

    def push_notifications_read(self, push_notification_id, **kwargs):  # noqa: E501
        """push_notifications_read  # noqa: E501

        Push notifications is a convenient way to get notified about events from the system. One can register a callback, i.e a valid URL that will be called whenever there is an event dispatched for this tenant. Note that this can result in a large numbers of calls, basically everytime there is a state of changes for one of the Account in this tenant, such callback would be invoked.  In case the error, the system will retry the callback as defined by the system settings \"billing.notifications.retries\"  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.push_notifications_read(push_notification_id, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str push_notification_id: A UUID string identifying this push notification. (required)
        :return: PushNotification
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.push_notifications_read_with_http_info(push_notification_id, **kwargs)  # noqa: E501
        else:
            (data) = self.push_notifications_read_with_http_info(push_notification_id, **kwargs)  # noqa: E501
            return data

    def push_notifications_read_with_http_info(self, push_notification_id, **kwargs):  # noqa: E501
        """push_notifications_read  # noqa: E501

        Push notifications is a convenient way to get notified about events from the system. One can register a callback, i.e a valid URL that will be called whenever there is an event dispatched for this tenant. Note that this can result in a large numbers of calls, basically everytime there is a state of changes for one of the Account in this tenant, such callback would be invoked.  In case the error, the system will retry the callback as defined by the system settings \"billing.notifications.retries\"  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.push_notifications_read_with_http_info(push_notification_id, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str push_notification_id: A UUID string identifying this push notification. (required)
        :return: PushNotification
                 If the method is called asynchronously,
                 returns the request thread.
        """

        all_params = ['push_notification_id']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        params = locals()
        for key, val in six.iteritems(params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method push_notifications_read" % key
                )
            params[key] = val
        del params['kwargs']
        # verify the required parameter 'push_notification_id' is set
        if ('push_notification_id' not in params or
                params['push_notification_id'] is None):
            raise ValueError("Missing the required parameter `push_notification_id` when calling `push_notifications_read`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'push_notification_id' in params:
            path_params['push_notification_id'] = params['push_notification_id']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Basic', 'Bearer']  # noqa: E501

        return self.api_client.call_api(
            '/push_notifications/{push_notification_id}/', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='PushNotification',  # noqa: E501
            auth_settings=auth_settings,
            async_req=params.get('async_req'),
            _return_http_data_only=params.get('_return_http_data_only'),
            _preload_content=params.get('_preload_content', True),
            _request_timeout=params.get('_request_timeout'),
            collection_formats=collection_formats)
