# -*- coding: utf-8 -*-

"""
pqapiv2

This file was automatically generated by APIMATIC v3.0 (
 https://www.apimatic.io ).
"""

from pqapiv2.api_helper import APIHelper
from pqapiv2.configuration import Server
from pqapiv2.controllers.base_controller import BaseController


class SpendBackController(BaseController):

    """A Controller to access Endpoints in the pqapiv2 API."""
    def __init__(self, config):
        super(SpendBackController, self).__init__(config)

    def retrieve_spendback(self,
                           spnd_token,
                           x_my_pay_quicker_version,
                           page=None,
                           page_size=20,
                           filter=None,
                           sort=None,
                           language=None):
        """Does a GET request to /spend-back/{spnd-token}.

        Retrieve a single spendback quote using the spendback token.

        Args:
            spnd_token (string): Auto-generated unique identifier representing
                an individual spendback transaction and quote, prefixed with
                <i>spnd-</i>.
            x_my_pay_quicker_version (string): Date-based API Version
                specified in the header <i>required</i> on all calls.
            page (int, optional): Page number of specific page to return
            page_size (int, optional): Number of items to be displayed per
                page
            filter (string, optional): Filter request results by specific
                criteria.
            sort (string, optional): Sort request results by specific
                attribute.
            language (LanguageTypesEnum, optional): Filter results by language
                type.

        Returns:
            void: Response from the API. OK

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/spend-back/{spnd-token}'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, {
            'spnd-token': {'value': spnd_token, 'encode': True}
        })
        _query_builder = self.config.get_base_uri()
        _query_builder += _url_path
        _query_parameters = {
            'page': page,
            'pageSize': page_size,
            'filter': filter,
            'sort': sort,
            'language': language
        }
        _query_builder = APIHelper.append_url_with_query_parameters(
            _query_builder,
            _query_parameters
        )
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare headers
        _headers = {
            'X-MyPayQuicker-Version': x_my_pay_quicker_version
        }

        # Prepare and execute request
        _request = self.config.http_client.get(_query_url, headers=_headers)
        _response = self.execute_request(_request)
        self.validate_response(_response)

    def accept_spendback_quote(self,
                               spnd_token,
                               x_my_pay_quicker_version):
        """Does a POST request to /spend-back/{spnd-token}.

        Accept an open spendback quote.

        Args:
            spnd_token (string): Auto-generated unique identifier representing
                an individual spendback transaction and quote, prefixed with
                <i>spnd-</i>.
            x_my_pay_quicker_version (string): Date-based API Version
                specified in the header <i>required</i> on all calls.

        Returns:
            void: Response from the API. OK

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/spend-back/{spnd-token}'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, {
            'spnd-token': {'value': spnd_token, 'encode': True}
        })
        _query_builder = self.config.get_base_uri()
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare headers
        _headers = {
            'X-MyPayQuicker-Version': x_my_pay_quicker_version
        }

        # Prepare and execute request
        _request = self.config.http_client.post(_query_url, headers=_headers)
        _response = self.execute_request(_request)
        self.validate_response(_response)

    def cancel_spendback_quote(self,
                               spnd_token,
                               x_my_pay_quicker_version):
        """Does a DELETE request to /spend-back/{spnd-token}.

        Cancel an open spendback quote.

        Args:
            spnd_token (string): Auto-generated unique identifier representing
                an individual spendback transaction and quote, prefixed with
                <i>spnd-</i>.
            x_my_pay_quicker_version (string): Date-based API Version
                specified in the header <i>required</i> on all calls.

        Returns:
            void: Response from the API. OK

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/spend-back/{spnd-token}'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, {
            'spnd-token': {'value': spnd_token, 'encode': True}
        })
        _query_builder = self.config.get_base_uri()
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare headers
        _headers = {
            'X-MyPayQuicker-Version': x_my_pay_quicker_version
        }

        # Prepare and execute request
        _request = self.config.http_client.delete(_query_url, headers=_headers)
        _response = self.execute_request(_request)
        self.validate_response(_response)

    def refund_spendback_full(self,
                              spnd_token,
                              x_my_pay_quicker_version):
        """Does a PUT request to /spend-back/{spnd-token}/refund.

        Perform a spendback refund for the full amount.

        Args:
            spnd_token (string): Auto-generated unique identifier representing
                an individual spendback transaction and quote, prefixed with
                <i>spnd-</i>.
            x_my_pay_quicker_version (string): Date-based API Version
                specified in the header <i>required</i> on all calls.

        Returns:
            void: Response from the API. OK

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/spend-back/{spnd-token}/refund'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, {
            'spnd-token': {'value': spnd_token, 'encode': True}
        })
        _query_builder = self.config.get_base_uri()
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare headers
        _headers = {
            'X-MyPayQuicker-Version': x_my_pay_quicker_version
        }

        # Prepare and execute request
        _request = self.config.http_client.put(_query_url, headers=_headers)
        _response = self.execute_request(_request)
        self.validate_response(_response)

    def refund_spendback_partial(self,
                                 spnd_token,
                                 x_my_pay_quicker_version):
        """Does a PATCH request to /spend-back/{spnd-token}/refund.

        Perform a spendback refund for a partial amount.

        Args:
            spnd_token (string): Auto-generated unique identifier representing
                an individual spendback transaction and quote, prefixed with
                <i>spnd-</i>.
            x_my_pay_quicker_version (string): Date-based API Version
                specified in the header <i>required</i> on all calls.

        Returns:
            void: Response from the API. OK

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/spend-back/{spnd-token}/refund'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, {
            'spnd-token': {'value': spnd_token, 'encode': True}
        })
        _query_builder = self.config.get_base_uri()
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare headers
        _headers = {
            'X-MyPayQuicker-Version': x_my_pay_quicker_version
        }

        # Prepare and execute request
        _request = self.config.http_client.patch(_query_url, headers=_headers)
        _response = self.execute_request(_request)
        self.validate_response(_response)

    def list_spend_backs(self,
                         x_my_pay_quicker_version,
                         page=None,
                         page_size=20,
                         filter=None,
                         sort=None,
                         language=None):
        """Does a GET request to /spend-back.

        Retrieve a list of all spendbacks that supports filtering, sorting,
        and pagination through existing mechanisms.

        Args:
            x_my_pay_quicker_version (string): Date-based API Version
                specified in the header <i>required</i> on all calls.
            page (int, optional): Page number of specific page to return
            page_size (int, optional): Number of items to be displayed per
                page
            filter (string, optional): Filter request results by specific
                criteria.
            sort (string, optional): Sort request results by specific
                attribute.
            language (LanguageTypesEnum, optional): Filter results by language
                type.

        Returns:
            void: Response from the API. OK

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/spend-back'
        _query_builder = self.config.get_base_uri()
        _query_builder += _url_path
        _query_parameters = {
            'page': page,
            'pageSize': page_size,
            'filter': filter,
            'sort': sort,
            'language': language
        }
        _query_builder = APIHelper.append_url_with_query_parameters(
            _query_builder,
            _query_parameters
        )
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare headers
        _headers = {
            'X-MyPayQuicker-Version': x_my_pay_quicker_version
        }

        # Prepare and execute request
        _request = self.config.http_client.get(_query_url, headers=_headers)
        _response = self.execute_request(_request)
        self.validate_response(_response)

    def quote_spendback(self,
                        x_my_pay_quicker_version,
                        body=None):
        """Does a POST request to /spend-back.

        Create a spendback quote. <i>*Spendbacks can be automatically accepted
        by setting the `autoAcceptQuote` flag. If not automatically accepted,
        a POST is required to the spendback endpoint using the token returned
        in the response. Quotes can be accepted, cancelled, or allowed to
        expire.</i>

        Args:
            x_my_pay_quicker_version (string): Date-based API Version
                specified in the header <i>required</i> on all calls.
            body (object, optional): TODO: type description here.

        Returns:
            void: Response from the API. OK

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/spend-back'
        _query_builder = self.config.get_base_uri()
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare headers
        _headers = {
            'X-MyPayQuicker-Version': x_my_pay_quicker_version,
            'Content-Type': 'application/json'
        }

        # Prepare and execute request
        _request = self.config.http_client.post(_query_url, headers=_headers, parameters=APIHelper.json_serialize(body))
        _response = self.execute_request(_request)
        self.validate_response(_response)
