"""Module used for handling cache"""
from pymemcache import serde
from pymemcache.client.base import Client

from .constants import MEMCACHED_HOST_PATH


class DummyClient:
    """
    A dummy in-memory client that mimics the behavior of a memcached client.

    This class is designed to simulate the behavior of the `pymemcache.Client`
    for testing or development purposes. It stores data in a Python dictionary
    and provides methods to set, get, and update key-value pairs.

    Attributes:
        _data (dict): A dictionary that holds the key-value pairs.

    Methods:
        set(key, value, **kwargs):
            Stores the given key-value pair in the internal dictionary.

        set_many(data, **kwargs):
            Updates the internal dictionary with multiple key-value pairs.

        get(key, **kwargs):
            Retrieves the value associated with the given key from the internal
            dictionary.
    """
    _data = {}
    def set(self, key, value, **kwargs):    # pylint: disable=unused-argument
        """
        Store a key-value pair in the internal dictionary.

        Args:
            key: The key for the item to be stored.
            value: The value to be stored under the given key.
            **kwargs: Additional keyword arguments (unused).
        """
        self._data[key] = value

    def set_many(self, data, **kwargs): # pylint: disable=unused-argument
        """
        Update the internal dictionary with multiple key-value pairs.

        Args:
            data: A dictionary containing key-value pairs to be added.
            **kwargs: Additional keyword arguments (unused).
        """
        self._data.update(data)

    def get(self, key, **kwargs):   # pylint: disable=unused-argument
        """
        Retrieve the value associated with the given key.

        Args:
            key: The key for the item to be retrieved.
            **kwargs: Additional keyword arguments (unused).

        Returns:
            The value associated with the given key if it exists.
        """
        return self._data[key]


if MEMCACHED_HOST_PATH is None:
    client = DummyClient()
else:
    client = Client(
        MEMCACHED_HOST_PATH,
        timeout=1,
        allow_unicode_keys=True,
        encoding='utf-8',
        serde=serde.pickle_serde
    )
