from ..exceptions import ShorteningErrorException
from ..base import BaseShortener


class Shortener(BaseShortener):
    """The Null Pointer implementation

    Args:
        domain (str): Optional string for the null pointer instance to use. Default is
            'https://0x0.st'. Any URL to a Null Pointer instance is supported,
            for example:

                - ``https://0x0.st``
                - ``https://ttm.sh``

    Example:

        >>> import pyshorteners
        >>> s = pyshorteners.Shortener(domain='https://0x0.st')
        >>> s.nullpointer.short('https://www.google.com')
        'https://0x0.st/jU'
    """

    def short(self, url):
        """Short implementation for The Null Pointer
        Args:
            url (str): the URL you want to shorten

        Returns:
            str: The shortened URL

        Raises:
            ShorteningErrorException: If the data is malformed or we got a bad
            status code on API response
        """
        url = self.clean_url(url)
        api_url = self.clean_url(getattr(self, "domain", "https://0x0.st"))
        payload = {"shorten": url}

        response = self._post(api_url, data=payload)

        if not response.ok:
            raise ShorteningErrorException(response.content)

        return response.text