import json
import requests
from django.conf import settings


class Request_API:
    """Dispatcher de llamadas HTTP internas hacia las APIs especializadas."""

    def _post(self, base_url, url_path, data):
        url = base_url.rstrip('/') + '/' + url_path.lstrip('/')
        headers = {'Content-Type': 'application/json'}
        response = requests.post(url, data=json.dumps(data), headers=headers, timeout=30)
        return response.json(), response.status_code

    # ------------------------------------------------------------------ #
    # api_backoffice                                                        #
    # ------------------------------------------------------------------ #

    def backoffice_get_parameterized(self, data):
        return self._post(settings.API_BACKOFFICE, 'api/general/get_parameterized/', data)

    def backoffice_get_dataComplex(self, data):
        return self._post(settings.API_BACKOFFICE, 'api/general/get_dataComplex/', data)

    def backoffice_set_parameterized(self, data):
        return self._post(settings.API_BACKOFFICE, 'api/general/set_parameterized/', data)

    def backoffice_set_data2(self, data):
        return self._post(settings.API_BACKOFFICE, 'api/general/set_data2/', data)

    def backoffice_set_data_batch(self, data):
        return self._post(settings.API_BACKOFFICE, 'api/general/set_data_batch/', data)

    def backoffice_get_BBDD(self, data):
        return self._post(settings.API_BACKOFFICE, 'api/general/get_BBDD/', data)

    def backoffice_set_BBDD(self, data):
        return self._post(settings.API_BACKOFFICE, 'api/general/set_BBDD/', data)

    # ------------------------------------------------------------------ #
    # api_comunicaciones                                                    #
    # ------------------------------------------------------------------ #

    def comunicaciones_get_parameterized(self, data):
        return self._post(settings.API_COMUNICACIONES, 'api/general/get_parameterized/', data)

    def comunicaciones_get_dataComplex(self, data):
        return self._post(settings.API_COMUNICACIONES, 'api/general/get_dataComplex/', data)

    def comunicaciones_set_parameterized(self, data):
        return self._post(settings.API_COMUNICACIONES, 'api/general/set_parameterized/', data)

    def comunicaciones_set_data2(self, data):
        return self._post(settings.API_COMUNICACIONES, 'api/general/set_data2/', data)

    def comunicaciones_set_data_batch(self, data):
        return self._post(settings.API_COMUNICACIONES, 'api/general/set_data_batch/', data)

    def comunicaciones_get_BBDD(self, data):
        return self._post(settings.API_COMUNICACIONES, 'api/general/get_BBDD/', data)

    def comunicaciones_set_BBDD(self, data):
        return self._post(settings.API_COMUNICACIONES, 'api/general/set_BBDD/', data)

    def comunicaciones_enviar_email(self, data):
        return self._post(settings.API_COMUNICACIONES, 'api/email/enviar/', data)

    def comunicaciones_enviar_sms(self, data):
        return self._post(settings.API_COMUNICACIONES, 'api/sms/enviar/', data)

    # ------------------------------------------------------------------ #
    # api_documentacion                                                     #
    # ------------------------------------------------------------------ #

    def documentacion_get_parameterized(self, data):
        return self._post(settings.API_DOCUMENTACION, 'api/general/get_parameterized/', data)

    def documentacion_get_dataComplex(self, data):
        return self._post(settings.API_DOCUMENTACION, 'api/general/get_dataComplex/', data)

    def documentacion_set_parameterized(self, data):
        return self._post(settings.API_DOCUMENTACION, 'api/general/set_parameterized/', data)

    def documentacion_set_data2(self, data):
        return self._post(settings.API_DOCUMENTACION, 'api/general/set_data2/', data)

    def documentacion_set_data_batch(self, data):
        return self._post(settings.API_DOCUMENTACION, 'api/general/set_data_batch/', data)

    def documentacion_get_BBDD(self, data):
        return self._post(settings.API_DOCUMENTACION, 'api/general/get_BBDD/', data)

    def documentacion_set_BBDD(self, data):
        return self._post(settings.API_DOCUMENTACION, 'api/general/set_BBDD/', data)

    def documentacion_generar_pdf(self, data):
        return self._post(settings.API_DOCUMENTACION, 'api/generation/pdf/', data)

    def documentacion_guardar(self, data):
        return self._post(settings.API_DOCUMENTACION, 'api/storage/guardar/', data)
